Наиболее читаемый (в терминах кода) способ заполнения карты & lt; string, string & gt; с данными о строительстве в C ++ 03

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

0

Решение

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");
}
3

Другие решения

Единственный способ сделать это в 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;
}
1

По вопросам рекламы [email protected]