sorting in std::map where key is a std::string

后端 未结 4 1423
-上瘾入骨i
-上瘾入骨i 2021-02-01 18:20

I have a std::map mymap

Now, if I insert values in the map like:

std::map  mymap;
mymap[\"first\"] = \"hi\";
mymap[\"third\"] = \"         


        
相关标签:
4条回答
  • 2021-02-01 18:50

    The standard defines:

    The fundamental property of iterators of associative containers is that they iterate through the containers in the non-descending order of keys where non-descending is defined by the comparison that was used to construct them.

    0 讨论(0)
  • 2021-02-01 18:54

    The map is actually a tree, and is sorted by KEY order. You are printing itr->second which is the VALUE not the KEY. If you want your key/value pairs sorted by VALUE, use the VALUE as key instead, or store everything in another container (say an array), then sort them.

    0 讨论(0)
  • 2021-02-01 19:08

    The elements in std::map are ordered (by default) by operator< applied to the key.

    The code you posted, with minor edits, worked for me as you expected:

    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";
    }
    

    Prints:

    hi
    hello
    how r you
    
    0 讨论(0)
  • 2021-02-01 19:10

    std::map is already ordered. If you were using unordered_map, now you'd have a problem!

    Entries in std::map are ordered by the key, or itr->first. itr->second as you have it, refers to the value associated with the key.

    Further more, you're not iterating over the map, you're iterating over file_line (I don't know what that is, but I'm going to assume it's different from mymap. That is what you should be iterating over).

    0 讨论(0)
提交回复
热议问题