我有两个多映射。我想创建一个新的多映射,它在给定的这两个多映射中具有公共(public)键值对:
例如:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main ()
{
multimap<std::string, std::string> m;
multimap<std::string, std::string> n;
m.insert(multimap<string,string>::value_type("1-2","1-1"));
m.insert(multimap<string,string>::value_type("1-2","1-2"));
m.insert(multimap<string,string>::value_type("1-2","1-3"));
m.insert(multimap<string,string>::value_type("1-2","1-4"));
m.insert(multimap<string,string>::value_type("1-3","2-1"));
m.insert(multimap<string,string>::value_type("1-3","21-1"));
m.insert(multimap<string,string>::value_type("1-3","21-2"));
n.insert(multimap<string,string>::value_type("1-2","1-1"));
n.insert(multimap<string,string>::value_type("1-2","1-2"));
n.insert(multimap<string,string>::value_type("1-2","1-5"));
n.insert(multimap<string,string>::value_type("1-2","1-7"));
n.insert(multimap<string,string>::value_type("1-3","2-1"));
n.insert(multimap<string,string>::value_type("1-3","21-4"));
n.insert(multimap<string,string>::value_type("1-3","21-2"));
cout<<"multimap of m"<<endl;
cout<<"--------------"<<endl;
for(multimap<string,string>::iterator i=m.begin();i!=m.end();i++)
cout <<i->first<<" "<<i->second<<endl;
cout<<"multimap of n"<<endl;
cout<<"--------------"<<endl;
for(multimap<string,string>::iterator i=n.begin();i!=n.end();i++)
cout <<i->first<<" "<<i->second<<endl;
}
这导致:
multimap of m
--------------
1-2 1-1
1-2 1-2
1-2 1-3
1-2 1-4
1-3 2-1
1-3 21-1
1-3 21-2
multimap of n
--------------
1-2 1-1
1-2 1-2
1-2 1-5
1-2 1-7
1-3 2-1
1-3 21-4
1-3 21-2
我想创建一个新的 multimap :它有以下元素:
1-2 1-1
1-2 1-2
1-3 2-1
1-3 21-2
编辑:
还有一种方法可以从两个 map 中删除公共(public)元素(对)。
最佳答案
使用 std::set_intersection
来自 <algorithm>
的功能模板
std::multimap<T1, T2> newMap;
std::set_intersection(map1.begin(), map1.end(),
map2.begin(), map2.end(),
std::inserter(newMap, newMap.begin());
编辑 是的,显然这不适用于多 map ,因为它适用于 map 。我建议如下:
std::multimap<T1, T2> newMap;
std::vector<std::multimap<T1, T2>::value_type> v1(map1.begin(), map1.end());
std::sort(v1.begin(), v1.end());
std::vector<std::multimap<T1, T2>::value_type> v2(map2.begin(), map2.end());
std::sort(v2.begin(), v2.end());
std::set_intersection(v1.begin(), v1.end(),
v2.begin(), v2.end(),
std::inserter(newMap, newMap.begin());
关于c++ - 比较两个 multimaps c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8559820/