C++ 在双重映射中为

C++ 在双重映射中为,c++,c++11,C++,C++11,我有双人地图 map <string, set <string>> a; map a; 并希望按字典顺序输出该映射。我尝试以下代码: map <string, set <string>> a; for (auto pair = a.begin(); pair != a.end(); pair++) { cout << pair->first << " - "; for (auto value

我有双人地图

map <string, set <string>> a;
map a;
并希望按字典顺序输出该映射。我尝试以下代码:

map <string, set <string>> a;    
for (auto pair = a.begin(); pair != a.end(); pair++) {
    cout << pair->first << " - ";
    for (auto value = pair->second->begin(); value != pair->second->end(); value++) {
        cout << *value << " " << endl;
    }
}
map a;
for(自动配对=a.begin();配对!=a.end();配对++){
cout first second->begin();value!=pair->second->end();value++){

cout如果您想使用C++11…这应该可以:

map <string, set <string>> a;
for (auto & pair : a) {
    cout << pair.first << " - ";
    for (auto & value : pair.second) {
        cout << value << " " << endl;
    }
}
map a;
用于(自动和配对:a){

cout如果您想使用C++11…这应该可以:

map <string, set <string>> a;
for (auto & pair : a) {
    cout << pair.first << " - ";
    for (auto & value : pair.second) {
        cout << value << " " << endl;
    }
}
map a;
用于(自动和配对:a){

cout
pair->second.begin()
second->end()
value!=pair->second.end()
pair
对迭代器来说是个坏名字,
->second
pair->second.begin()
值!=pair->second->end()
值!=pair.end()
对迭代器来说,pair
是个坏名字,second
不是迭代器,而是一个引用。
for(const auto&pair:a)
将避免创建对的副本。
for(const auto&pair:a)
将避免创建对的副本。