Joh*_*ock 5 c++ stl vector map
我想做这样的事情.有一个stl算法很容易做到这一点吗?
for each(auto aValue in aVector)
{
aMap[aValue] = 1;
}
Run Code Online (Sandbox Code Playgroud)
你可能std::transform
在std::vector
成std::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::pair
s,然后将这些元素插入到地图中。
或者,按照@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)
如果你有一对对矢量,其中对中的第一项将是地图的关键,第二项将是与该关键字相关联的值,你可以使用插入迭代器将数据复制到地图:
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)
也许是这样的:
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)
尝试这个:
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
,你可以在循环中改变它。另外,我回顾了原来的问题,并不清楚他们想要什么,所以我添加了另一个版本。