C++ 在多重映射中打印重复值一次
我有一个multimap,它包含使用myMap=std::multimap的C++ 在多重映射中打印重复值一次,c++,c++11,multimap,C++,C++11,Multimap,我有一个multimap,它包含使用myMap=std::multimap的 这是其中的一个示例数据 West;Tuulensuu West;Keskustori South;Sammonaukio West;Rautatieasema West;Tulli West;Sammonaukio East;Sammonaukio 我只想打印值,但是所有的值应该只打印一次,并且应该进行排序 我试过以下方法 void print_lines(myMap& tramlines) { fo
代码>
这是其中的一个示例数据
West;Tuulensuu
West;Keskustori
South;Sammonaukio
West;Rautatieasema
West;Tulli
West;Sammonaukio
East;Sammonaukio
我只想打印值,但是所有的值应该只打印一次,并且应该进行排序
我试过以下方法
void print_lines(myMap& tramlines)
{
for (auto it = tramlines.begin(); it != tramlines.end(); ) {
std::string key = it->second;
std::cout << it->second << std::endl;
// Advance to next non-duplicate entry.
do {
++it;
} while (it != tramlines.end() && key == it->second);
}
}
void打印线(myMap&tramlines)
{
对于(自动it=tramlines.begin();it!=tramlines.end();){
std::string key=it->second;
std::cout second);
}
}
它仍然多次打印这些值。所以我尝试了以下方法
auto uniq = std::unique(tramlines.begin(), tramlines.end());
tramlines.erase(uniq, tramlines.end());
for(auto item : tramlines)
{
std::cout << item.second << std::endl;
}
auto uniq=std::unique(tramlines.begin(),tramlines.end());
擦除(uniq,tramlines.end());
用于(自动项目:有轨电车线路)
{
std::coutstd::unique
不起作用,因为map
在pair
上迭代。它想对pair进行洗牌,但无法写入const
部分。它无论如何都不会起作用,因为多映射
值只对给定的键按顺序排列。unique
只对完全排序有效收藏
幸运的是,将所有内容移动到一个集合并不困难
std::set<std::string> unique;
std::transform(tramlines.begin(), tramlines.end(), std::inserter(unique, unique.end()), [](auto& p) { return p.second; });
std::设置唯一性;
std::transform(tramlines.begin()、tramlines.end()、std::inserter(unique、unique.end())、[](auto&p){return p.second;});
“将它们添加到集合中并打印出一个好主意”。我会说是的。地图不会为每个键存储多个值。你需要一个向量。地图不会,但多重地图会
std::set<std::string> unique;
std::transform(tramlines.begin(), tramlines.end(), std::inserter(unique, unique.end()), [](auto& p) { return p.second; });