у меня есть map<string, string>
и мне нужно заполнить его парами по умолчанию на строительстве. лайк "Sam" : "good", "ram" : "bad"
, Как в C ++ 03 сделать это наиболее читабельно в терминах кода на конструкции?
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");
}
Единственный способ сделать это в 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;
}