How to convert a sorted std::list of std::pair to a std::map

前端 未结 3 1203
南方客
南方客 2021-01-12 09:27

I have got a std::list< std::pair >, which I know is sorted according to the std::string element.

Since I

相关标签:
3条回答
  • 2021-01-12 09:31

    You can use std::copy and std::inserter:

    std::copy(the_list.begin(),the_list.end(),std::inserter(the_map,the_map.begin()));  
    

    because the iterator for a list< pair > has a value type compatible to map< X,Y >'s iterators.

    0 讨论(0)
  • 2021-01-12 09:33

    I would just iterate on the list and insert every pair into a map or use the neat method Luther Blissett has described.
    The fact that I don't get what are you trying to do means it will either result in unreadable code or that you are way off.
    Why are you doing it this way?
    Can you change the code to return a map to you instead of a list in the first place?

    0 讨论(0)
  • 2021-01-12 09:56

    If you already have a sorted list, which is sorted according to the predicate Predicate, you can just do the following:

    std::list< std::pair<std::string, double> > sorted_list;
    std::map<string, double, Predicate> map(sorted_list.begin(), sorted_list.end());
    

    The map constructor has linear time complexity if your list is already sorted, O(n*log n) otherwise. You can then work directly with the map as you would any other.

    If you later want the results back in your list you could just do the opposite:

    sorted_list.assign(map.begin(), map.end());
    0 讨论(0)
提交回复
热议问题