Объявление std :: map констант - PullRequest
3 голосов
/ 09 декабря 2010

Как объявить константы карты std, например,

int a[10] = { 1, 2, 3 ,4 };
std::map <int, int> MapType[5] = { };
int main()
{
}

В фрагменте about можно задать значения 1,2,3,4 для целочисленного массива a , аналогично какобъявлять некоторые константы MapType вместо добавления значений внутри функции main ().

Ответы [ 3 ]

6 голосов
/ 09 декабря 2010

В C ++ 0x это будет:

map<int, int> m = {{1,2}, {3,4}};
5 голосов
/ 09 декабря 2010

ОБНОВЛЕНИЕ: с C ++ 11 и далее вы можете ...

std::map<int, int> my_map{ {1, 5}, {2, 15}, {-3, 17} };

... или подобное, где каждая пара значений - например, {1, 5} - кодирует ключ - 1 -и сопоставленное значение - 5.То же самое работает и для unordered_map (версия хеш-таблицы).


Используя только стандартные процедуры C ++ 03, рассмотрим:

#include <iostream>
#include <map>

typedef std::map<int, std::string> Map;

const Map::value_type x[] = { std::make_pair(3, "three"),
                              std::make_pair(6, "six"),
                              std::make_pair(-2, "minus two"), 
                              std::make_pair(4, "four") };

const Map m(x, x + sizeof x / sizeof x[0]);

int main()
{
    // print it out to show it works...
    for (Map::const_iterator i = m.begin();
            i != m.end(); ++i)
        std::cout << i->first << " -> " << i->second << '\n';
}
1 голос
/ 09 декабря 2010

Я был настолько взволнован решением Boost.Assign этой проблемы, что я написал сообщение в блоге об этом около полутора лет назад (незадолго до того, как я бросил вести блог):

Соответствующий код из поста был такой:

#include <boost/assign/list_of.hpp>
#include <map>

static std::map<int, int>  amap = boost::assign::map_list_of
    (0, 1)
    (1, 1)
    (2, 2)
    (3, 3)
    (4, 5)
    (5, 8);


int f(int x)
{
    return amap[x];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...