c++ - 根据其属性将 vector 分成更小的 vector

标签 c++

我想用 C++ 编写一些东西,虽然我有想法并且尝试编写它,但我没有实现如何去做。

解释

假设我有一个 vector<int>我们定义每次运行程序的时间。它的名字是mainVector该 vector 将具有随机数的整数。每个 int 都有一个属性。

例如,我们有具有以下值的 vector :vector<int> mainVector {1, 3, 15, 33, 35, 42, 57, 69, 73} ; 我们还有另一个 vector<int>它根据元素的位置描述 mainVector 中每个元素的属性,称为 properties例如:vector<int> properties {1, 1, 1, 2, 2, 2, 3, 3, 3}

我现在想要的是将第一个 vector 分成尽可能多的较小 vector ,因为存在不同的属性。例如,在最后一种情况下,我将拥有三个新 vector : 包含属性 1 元素的 vector :1, 3, 15 ;具有属性 2 的元素的 vector :33, 35, 42 ;和具有属性 3 的元素的 vector :57, 69, 73 .

问题是我不知道如何定义它,因为每次执行代码时第一个 vector 都可能不同。

这里附上我的代码和我的想法:

do
{
    for(int t=0;t<mainVector.size();t++) // id tables
    {
        string Vect("Vector");
        Vect +=t;
        vector<int> Vect

        for(int u=0;u<mainVector.size();u++)
      {
            if(properties.at(u) & t)
            {
               Vect.push_back(mainVector.at(u)); // I know this is not correct but I hope you understand what I mean
            }
        }
    }
}

提前感谢大家!!! :)

澄清

我想澄清一些重要的事情:mainVector已经是另一个更大 vector 的子 vector ,该 vector 已通过输入定义。 bigVector <int>{1, 2, 3, 4, 5, 6, ...., 99, 100, 101, ..., n}vector <int> properties是一个 vector ,实际上,和一个 bigvector 一样大,在任何情况下都可以不同,例如,在一次执行中,我可以是 {1, 1, 1, 1, 1, 1, ..., 1, 1, 2, ... 2}再等一会儿{1, 1, 1, 1, 2, 2, ..., 26, 26, 27, 49}所以我想我不能像你们中的一些人推荐的那样做 vector 的 vector ,有什么想法吗??

再次感谢!!!

最佳答案

你可以使用 std::map<int, std::vector<int>>跟踪每个属性以及与该属性关联的数字。例如:

typedef std::vector<int> vec_t;
typedef std::map<int, vec_t> map_t;

// the real work
map_t propMap;
for (vec_t::size_type i = 0u, i_end = mainVector.size(); i != i_end; ++i)
    propMap[properties[i]].push_back(mainVector[i]);

// printing the results
for (map_t::const_iterator miter = propMap.begin(), miter_end = propMap.end();
        miter != miter_end;
        ++miter)
{
    std::cout << "all numbers with property value of " << miter->first << ':';
    for (vec_t::const_iterator viter = miter->second.begin(), viter_end = miter->second.end();
            viter != viter_end;
            ++viter)
    {
        std::cout << ' ' << *viter;
    }
    std::cout << std::endl;
}

打印(对于您提供的示例数据):

all numbers with property value of 1: 1 3 15
all numbers with property value of 2: 33 35 42
all numbers with property value of 3: 57 69 73

关于c++ - 根据其属性将 vector 分成更小的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5622545/

相关文章:

c++:关于 for 语句和参数的一般问题

我不明白的 C++ 错误 : syntax missing ';' before identifier

c++ - 使用共享指针时释放后堆的使用

c++ - cin.getline 不等待 rand 上的输入和设置参数

c++ - 如何从face_handle获取人脸id?

c++ - 带有 "noexcept"构造函数的程序被 gcc 接受,被 clang 拒绝

C++ 指针 vs std::vector:长变量有什么含义?

c++ - 堆栈列表实现

c++ - 了解使用C++赋值时的运算符 “less”或 “greater”

c++ - SDL2 : Fast Pixel Manipulation