遍历地图和打印内容时获得向后输出
Posted
技术标签:
【中文标题】遍历地图和打印内容时获得向后输出【英文标题】:Getting backwards output when iterating through a map and printing content 【发布时间】:2017-04-16 05:45:14 【问题描述】:当我阅读下面发布的代码时,打印的输出似乎是:
Syndy
James
Phuong
Germaine
Agatha
Anges
Jack
但是,当我运行它时,我首先打印了 Germaine 和他的朋友矢量,然后是 Syndy 和她的朋友矢量:
Germaine
Agatha
Anges
Jack
Syndy
James
Phuong
谁能帮我理解为什么第二个键 Germaine 在 printFacebook
函数而不是 Syndy 中首先被访问和打印?
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
void printFacebook(map<string, vector<string>>& m)
for (pair<string, vector<string>> p : m)
cout << p.first << endl;
for (string f : p.second)
cout << "\t" << f << endl;
int main()
map<string, vector<string>> facebook;
facebook["Syndy"].push_back("James");
facebook.find("Syndy")->second.push_back("Phuong");
//map<string, vector<string>>::iterator f = facebook.find("Syndy");
//auto f = facebook.find("Syndy");
facebook["Germaine"];
facebook.find("Germaine")->second.push_back("Agatha");
facebook.find("Germaine")->second.push_back("Anges");
facebook.find("Germaine")->second.push_back("Jack");
printFacebook(facebook);
【问题讨论】:
【参考方案1】:std::map
存储按键值排序的项目。在您的情况下,密钥是 "Syndy"
和 "Germaine"
。它们的默认顺序是 "Germaine"
排在第一位,"Syndy"
排在第二位。
因此,当您遍历映射的项目时,与键 "Germaine"
对应的项目将在与键 "Syndy"
对应的项目之前看到。
这解释了输出。
【讨论】:
那么 std::map 会自行排序吗?它如何确定键的顺序? @StacksAndParsing,是的。std::map
有一个用于比较键的可选参数。默认值为std::less<Key>
。有关详细信息,请参阅en.cppreference.com/w/cpp/container/map。以上是关于遍历地图和打印内容时获得向后输出的主要内容,如果未能解决你的问题,请参考以下文章
建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果