如何在c ++中将值从矢量转换为地图?

Joh*_*ock 5 c++ stl vector map

我想做这样的事情.有一个stl算法很容易做到这一点吗?

 for each(auto aValue in aVector)
                {
                aMap[aValue] = 1;
                }
Run Code Online (Sandbox Code Playgroud)

Ola*_*che 9

你可能std::transformstd::vectorstd::map

std::vector<std::string> v{"I", "want", "to", "do", "something", "like", "this"};
std::map<std::string, int> m;
std::transform(v.begin(), v.end(), std::inserter(m, m.end()),
               [](const std::string &s) { return std::make_pair(s, 1); });
Run Code Online (Sandbox Code Playgroud)

这将根据向量的元素创建std::pairs,然后将这些元素插入到地图中。


或者,按照@BenFulton 的建议,将两个向量压缩到一个地图中

std::vector<std::string> k{"I", "want", "to", "do", "something", "like", "this"};
std::vector<int> v{1, 2, 3, 4, 5, 6, 7};
std::map<std::string, int> m;

auto zip = [](const std::string &s, int i) { return std::make_pair(s, i); };
std::transform(k.begin(), k.end(), v.begin(), std::inserter(m, m.end()), zip);
Run Code Online (Sandbox Code Playgroud)


Jer*_*fin 8

如果你有一对对矢量,其中对中的第一项将是地图的关键,第二项将是与该关键字相关联的值,你可以使用插入迭代器将数据复制到地图:

std::vector<std::pair<std::string, int> > values;

values.push_back(std::make_pair("Jerry", 1));
values.push_back(std::make_pair("Jim", 2));
values.push_back(std::make_pair("Bill", 3));

std::map<std::string, int> mapped_values;

std::copy(values.begin(), values.end(), 
          std::inserter(mapped_values, mapped_values.begin()));
Run Code Online (Sandbox Code Playgroud)

或者,您可以从矢量初始化地图:

std::map<std::string, int> m2((values.begin()), values.end());
Run Code Online (Sandbox Code Playgroud)


Ker*_* SB 7

也许是这样的:

std::vector<T> v;   // populate this

std::map<T, int> m;

for (auto const & x : v) { m[x] = 1; }
Run Code Online (Sandbox Code Playgroud)

  • +1如果没有问题的更多细节,这将尽其所能。 (2认同)

OGH*_*OGH 0

尝试这个:

for (auto it = vector.begin(); it != vector.end(); it++) {
    aMap[aLabel] = it;
    //Change aLabel here if you need to
    //Or you could aMap[it] = 1 depending on what you really want.
}
Run Code Online (Sandbox Code Playgroud)

我认为这就是您想要做的。

如果你想更新 的值aLabel,你可以在循环中改变它。另外,我回顾了原来的问题,并不清楚他们想要什么,所以我添加了另一个版本。