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