如何在C++中迭代集合(std::map<string,std::set< string> >)的映射?

How to iterate over a map of set (std::map<string,std::set< string> >) in C++?

本文关键字:gt string lt std set 映射 map C++ 迭代 集合      更新时间:2023-10-16

对于一个特定的键,我想插入并打印与该键对应的集合的元素。例如,如果我A-橙色,苹果B-红色、蓝色

我该如何打印?到目前为止,我已经写了这样的文章:`

std::map<string,std::set<string> > mp;
std::map<string,std::set<string> >::const_iterator row;
std::set<string>:: const_iterator col;
mp["A"].insert("pawan");
mp["A"].insert("patil");
for (row = mp.begin(); row!= mp.end(); row++)
    for (col = row->begin(); col!=row.end(); col++)
return 0;`

我不知道该怎么开始。请帮忙!`

for(auto const& pair : mp) {
    cout << pair.first << ": ";
    for(auto const& elem : pair.second) {
        cout << elem << ", ";
    }
    cout << "n";
}

实例

或者,如果你想更多地使用std算法:

std::for_each(mp.cbegin(), mp.cend(), [](auto const& pair){
    cout << pair.first << ": ";
    std::copy(pair.second.cbegin(), pair.second.cend(), std::ostream_iterator<std::string>(std::cout, ", "));
    cout << "n";
});

实例

问题想要插入一个元素,然后只打印该键的集合

第一步是找到集合:

auto &s=mp["A"];

现在,在这个集合中插入值:

s.insert("pawan");
s.insert("patil");

现在,对集合进行迭代,打印集合中的值:

for (const auto &v:s)
    std::cout << v << std::endl;
for(auto it=mp.begin();it!=mp.end();++it)  //Loop to iterate over map elements
 {
    cout<<it->first<<"=";    
    for(auto it1=it->second.begin(); it1 !=it->second.end(); it1++)
        cout<<*it1<<" ";
    cout<<"n";   
}

外部for循环在map的所有元素上迭代,内部for循环打印与map中键关联的集合对应的值。