Flip map key-value pair

前端 未结 4 917
后悔当初
后悔当初 2021-01-11 17:10

I have a map. I want to flip the key-value so that it not becomes map. So basically the value of the first map becomes the key of the second map. How do i do this?

E

相关标签:
4条回答
  • 2021-01-11 17:19

    If you want lookup in both directions then you can use Boost.bimap

    0 讨论(0)
  • The most straightforward way (that I know of) is to create a new map with the types flipped, and iterate the old one and add each key-value pair in reverse.

    For example,

    map<int, float> if_map;
    
    // insert some items into if_map
    if_map[1] = 43.11;
    if_map[44] = -13421.438;
    
    map<float, int> reversed;
    
    for (map<int, float>::iterator i = if_map.begin(); i != if_map.end(); ++i)
        reversed[i->second] = i->first;
    
    0 讨论(0)
  • 2021-01-11 17:33
    #include<iostream>
    #include<map>
    #include<algorithm>
    
    using namespace std;
    
    template<typename A, typename B>
    pair<B,A> flip_pair(const pair<A,B> &p)
    {
        return pair<B,A>(p.second, p.first);
    }
    
    template<typename A, typename B>
    map<B,A> flip_map(const map<A,B> &src)
    {
        map<B,A> dst;
        transform(src.begin(), src.end(), inserter(dst, dst.begin()), 
                       flip_pair<A,B>);
        return dst;
    }
    
    int main(void)
    {
      std::map<char, int> src;
    
      src['a'] = 10;
      src['b'] = 20;
      src['c'] = 160;
      src['d'] = 110;
      src['e'] = 0;
    
      std::map<int, char> dst = flip_map(src);
    
      map<int, char>::iterator it;
      for(it=dst.begin(); it!=dst.end(); it++) {
        cout << it->first << " : " << it->second << endl;
      }
    }
    
    0 讨论(0)
  • 2021-01-11 17:33
    for (auto i=normal.begin(); i!=normal.end(); ++i)
        flipped[i->second] = i->first;
    
    0 讨论(0)
提交回复
热议问题