C++ 在多重映射中打印重复值一次

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

我有一个multimap,它包含使用myMap=std::multimap的

这是其中的一个示例数据

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::cout
std::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; });