簡體   English   中英

在std :: map中排序,其中key是std :: string

[英]sorting in std::map where key is a std::string

我有一個std :: map mymap

現在,如果我在地圖中插入值,如:

std::map <string, string> mymap;
mymap["first"] = "hi";
mymap["third"] = "how r you";
mymap["second"] = "hello";

現在我想迭代地圖並以排序(鍵)方式打印值:

map<string, string>::iterator itr;
for(itr = mymap.begin(); itr != mymap.end(); itr++)
{
   string newline = itr->second;
   cout << newline << endl;
}

輸出應該是:

hi 
hello 
how r you 

我認為默認情況下,地圖存儲按排序鍵方式存儲,但我在輸出中得到的輸入與輸入相同。 我需要為此提供我的排序功能,還是需要在迭代地圖之前做一些額外的事情?

std::map中的元素是由operator<應用於鍵的(默認情況下)排序的。

您發布的代碼經過了少量修改后,按照您的預期為我工作:

std::map <string, string> mymap;
mymap["first"]="hi";
mymap["third"]="how r you";
mymap["second"]="hello";

for (std::map<string, string>::iterator i = mymap.begin(); i != mymap.end(); i++)
{
    cout << i->second << "\n";
}

打印:

hi
hello
how r you

map實際上是一棵樹 ,按KEY順序排序。 您正在打印itr->second ,這是VALUE而不是KEY。 如果您希望鍵值/值對按VALUE排序,請使用VALUE作為鍵,或將所有內容存儲在另一個容器(例如數組)中,然后對它們進行排序。

std :: map已經訂購了。 如果您使用的是unordered_map,那么現在您遇到了問題!

std :: map中的條目按鍵排序,或者首先是itr->。 itr->第二,因為你有它,指的是與鍵相關的值。

更進一步,你沒有迭代地圖,你正在迭代file_line(我不知道那是什么,但我會假設它與mymap不同。這就是你應該迭代的東西)。

標准定義:

關聯容器的迭代器的基本屬性是它們以密鑰的非降序順序遍歷容器,其中非降序由用於構造它們的比較定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM