我宣布了,
map<int, vector<int>> abcmap;
map<int,vector<int>>:: iterator itmap;
vector<int>SPLINKS;
SPLINKS包含:
1 3 4
abcmap包含;
1=> 1
2=> 2 6
3=> 1 2 4
我想迭代SPLINKS和abcmap来查找和删除两个容器中不匹配的元素;
即执行后;
2=>2 6 //not matched with either 1 or 3 or 4
我写了类似的东西;
for(itmap = abcmap.begin(); itmap != abcmap.end(); ++itmap)
{
cout << endl << itmap->first <<" => ";
for(size_t n=0; n<(*itmap).second.size(); n++)
{
for(itspl=SPLINKS.begin(); itspl!=SPLINKS.end(); ++itspl)
{
if((*itspl)==itmap->second[n])
{
abcmap.erase(itmap);
}
}
}
}
但我得到调试断言失败了!。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
通过&#34;查找并删除两个容器中不匹配的元素&#34;我知道您要从地图中删除。无论哪种方式,都可以轻松修改代码以从SPLINKS中删除元素
以下是代码:
std::map<int, std::vector<int>> map;
std::vector<int> vector = {1, 3, 4};
map[0] = {1};
map[1] = {2, 6, 5};
map[2] = {1, 2, 4};
for(auto &pair: map) { // iterate map
auto ¤tvec = pair.second;
std::vector<int> values;
for(std::size_t i = 0; i < currentvec.size(); i++) { // iterate vectors of map
bool contains = false;
for(std::size_t j = 0; j < vector.size(); j++) { // iterate vector this be your SPLINKS
if(currentvec[i] == vector[j]) {
contains = true;
}
}
if (!contains) {
values.push_back(currentvec[i]);
}
}
for(std::size_t i = 0; i < values.size(); i++) {
currentvec.erase(std::remove(currentvec.begin(), currentvec.end(), values[i]), currentvec.end());
}
}
for (auto &pair : map) { // iterate map
auto ¤tvec = pair.second;
for (std::size_t i = 0; i < currentvec.size(); i++) {
std::cout << currentvec[i] << " ";
}
std::cout << std::endl;
}
标题必填:<map>
,<vector>
,<algorithm>
,<iostream>