删除多重映射中的重复键
Remove duplicate key in a multimap
我有一个多映射:
std::multimap < string, string >::iterator iter_map;
multimap < string, set<string> > my.map;
Typical output and data structure:
key - value
bird - air
bird - earth
fish - water
lion - earth
lion - water
我想更改数据结构(不仅是打印到),以便新数据将:
bird - air, earth
fish - water
lion - earth, water
换句话说,如何消除重复的键?
我这样做了:
int size_mmap = namesMultiMap1.size();
pair<multimap<string,string>::iterator,multimap<string,string>::iterator> ret;
for (int i = 0; i < 1; i++){
cout << " xxx "<< " =>";
ret = namesMultiMap1.equal_range("xxx");
for (nameItr1=ret.first; nameItr1!=ret.second; ++nameItr1)
cout << " " << (*nameItr1).second;
}
通过这种方式,我打印了在键 xxx 处添加的值,但我一次打印了一个元素。我想打印所有键和值。我需要自动化,因为地图很大。如果我使用迭代器对名称进行迭代多映射1 打印重复键。
好的,这可以像下面这样完成。请注意,结果的类型是 map<string, set<string> >
,而不是您想要的multimap < string, set<string> >
,因为您不希望其中包含重复的键,因此map
更有意义。
#include <map>
#include <set>
#include <string>
#include <iostream>
#include <iterator>
using namespace std;
typedef multimap<string,string> mm;
typedef map<string, set<string> > ms;
ms convert(const mm& m)
{
ms r;
for (mm::const_iterator it = m.begin(); it != m.end(); ++it)
{
set<string>& s(r[it->first]);
s.insert(it->second);
}
return r;
}
int main()
{
mm m;
m.insert(make_pair("john", "kowalski"));
m.insert(make_pair("john", "smiths"));
m.insert(make_pair("mary", "doe"));
m.insert(make_pair("mary", "walker"));
ms s(convert(m));
for (ms::iterator it = s.begin(); it != s.end(); ++it)
{
cout << it->first << ": ";
set<string> &st(it->second);
copy(st.begin(), st.end(), ostream_iterator<string>(cout, ", "));
cout << endl;
}
return 0;
}
这将打印:
john: kowalski, smiths,
mary: doe, walker,
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 如何从多映射中删除特定的重复项
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除映射和分割错误中的一个过去结束元素
- C++映射不删除元素
- c++:复制、删除和运算符=在原始指针映射中
- 当覆盖映射中的复杂对象键时,旧对象将被删除(C++)
- 删除 std::函数映射
- c++ 在循环中删除迭代器(映射的映射)
- 如何在多映射 c++ 中删除重复值?
- 在 c++ stl 映射中,删除具有重复值的条目
- 使用有序映射删除共享指针
- 遍历 STL 映射(集/多集)的最佳方法,同时元素可能会在循环期间被删除并重新插入?
- 删除映射中的指针会导致内存错误
- 静态映射中动态分配的对象.删除必要的
- 删除多重映射中的重复键
- 删除C++STL多映射中特定键的条目
- C 将HEAP对象插入std ::用insert()插入映射,而另一个则存在删除新的对象
- 映射内的c++映射-删除指针