c++ - 比较两个 multimaps c++

标签 c++ multimap

我有两个多映射。我想创建一个新的多映射,它在给定的这两个多映射中具有公共(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/

相关文章:

用于打印 unicode 字符串的 char16_t 的 C++ wprintf 格式说明符

java - 用集合实例化 Multimap?

Java - 寻找实现 Navigable 的排序 MultiMap

C++:STL multimap.equal_range()

c++ - 与 gcc 相比,comeau 编译器值得吗?

c++ - 如何将插槽作为参数传递

c++ - 使用 C++ 读取整个文件,忽略误报的 EOF

c++ - 如何以编程方式更改布局中小部件的顺序?

c++ - 打印 multimap<string, vector<string>>?

Java Guava : Iterating and removing keys of Multimap