c++ - 在c ++ stl map中,删除具有重复值的条目
问题描述
考虑 map mymap 有条目
<'a', 111>
<'b', 567>
<'c', 956>
<'d', 222>
<'e', 111>
<'f', 222>
<'h', 222>
<'i', 492>
等等...
如何删除地图中重复值的条目。
例如,键 'a' 和 'e' 存在值 111。因此,保留“a”的映射条目并删除“e”的条目
对于值 222,保留条目“d”并删除条目“f”和“h”。
我正在寻找具有最佳空间和时间复杂度的解决方案
解决方案
你可能想要这样的东西:
#include <iostream>
#include <map>
#include <set>
int main() {
std::map<char, int> mymap
{
{'a', 111}, {'b', 567}, {'c', 956}, {'d', 222},
{'e', 111}, {'f', 222}, {'h', 222}, {'i', 492},
};
std::set<int> existingvalues;
for (auto it = mymap.begin(); it != mymap.end(); it++)
{
if (existingvalues.find(it->second) != existingvalues.end())
mymap.erase(it--); // value already encountered => remove entry
else
existingvalues.insert(it->second); // value not yet encountered => remeber it
}
for (auto it = mymap.begin(); it != mymap.end(); it++)
std::cout << "<'" << it->first << "', " << it->second << ">\n";
}
推荐阅读
- php - 如何从 EXCEL 中获取 PHP 中的分组行?
- visual-studio - 如何打开/关闭 .NET Core 应用程序的 Docker 支持?
- ios - 更改 UINavigationBar 的前导边距和后边距
- php - SQLSRV 参数化查询在 GROUP BY 子句中永远存在
- python - 试图将 5 个卡值传递给函数,但不起作用
- tsql - 按时间段分组记录
- java - 使用 Firebase 的聊天应用
- kendo-ui - 资源的 Kendo Scheduler TimeLineView,将每个事件显示为好像它的 allDay 事件
- c# - 以编程方式下载电子邮件附件 C# WPF
- vba - VBA:运行时错误“438”:对象不支持此属性或方法