0

我有一个map<string, string>,我需要在构造时用默认对填充它。喜欢"Sam" : "good", "ram" : "bad"。如何在 C++03 中以最易读的方式在构造代码方面做到这一点?

4

2 回答 2

3

boost::assign::map_list_of让你用一些漂亮的语法来做到这一点,但如果你不能使用 Boost,你可以自己写。

#include <map>
#include <string>

template< class Key, class Type, class Traits = std::less<Key>,
          class Allocator = std::allocator< std::pair <const Key, Type> > >
class MapInit
{
  std::map<Key, Type, Traits, Allocator> myMap_;

  /* Disallow default construction */
  MapInit();

public:
  typedef MapInit<Key, Type, Traits, Allocator> self_type;
  typedef typename std::map<Key, Type, Traits, Allocator>::value_type value_type;

  MapInit( const Key& key, const Type& value )
  {
    myMap_[key] = value;
  }


  self_type& operator()( const Key& key, const Type& value )
  {
    myMap_[key] = value;
    return *this;
  }


  operator std::map<Key, Type, Traits, Allocator>()
  {
    return myMap_;
  }
};

int main()
{
  std::map<int, std::string> myMap = 
    MapInit<int, std::string>(10, "ten")
                             (20, "twenty")
                             (30, "thirty");
}
于 2012-09-17T03:11:41.340 回答
1

你可以在 C++03 中做到这一点的唯一方法是

mapName["Key"] = "Value";

如果你有很多,你可以有一个初始化它的函数。

map<std::string,std::string> makeMap() {
   map<std::string,std::string> example;
   example["Sam"] = "good";
   example["Ram"] = "bad";
   return example;
}
于 2012-09-17T02:58:31.243 回答