2013-09-13 4 views
4

Я хочу, чтобы в моем списке было целое число, а также строковое значение. Это возможно?
Я реализую хэш-таблицу, используя списки STL, которые могут хранить только целое число. Я хэширую строку, чтобы получить индекс, где я храню свое целое число. Теперь я хочу, чтобы моя строка также была сохранена с целым числом.Можем ли мы хранить 2 типа данных в списке STL?

EDIT 1:
так я использую это заявление:

list<pair<int,string>> table[127];  

и вот им ошибка при получении:
>>' should be>>»в списке аргументов вложенного шаблона ОК я это исправил .. кажется, я не помещал пробел в «>>», поэтому теперь его исправление

следующий вопрос
Как мне добавить пару в массив таблиц?

+0

станд :: пара ? – kfsone

+1

Или почему бы просто не использовать std :: map или std :: unordered_map? – kfsone

+2

Вы не совсем поняли, что вы имеете в виду как «а также», поэтому вы получаете два разных ответа. Если вы имеете в виду, что каждый элемент будет содержать строку ** и ** целое число, тогда вам понадобится «пара». Если это будет строка ** или ** целое число, тогда вам понадобится комбинация 'struct'-'union'. – nickie

ответ

6

Вы можете получить список std::pair с или с C++ 11, std::tuple, например:

std::list < std::pair< int, std::string > >list; 
std::list < std::tuple< int, std::string > >list; 

Для доступа к элементам внутри пары, используйте pair.first и pair.second. Для доступа к элементам внутри кортежа, используйте std::get:

auto t = std::make_tuple(1,"something"); 
std::get<0>(t);//will get the first element of the tuple 
+0

Спасибо, это было очень полезно .. плохо сделайте изменения и сообщите, если я столкнулся с любыми проблемами –

1

Вы можете сохранить строку и целое число в структуре и сохранить объекты структуры.

Каждый элемент списка может выглядеть следующим образом:

struct element { 
    string str; 
    int val; 
}; 

Это C способ справиться, пожалуйста, @ ответ SingerOfTheFall также.

+0

Ввод 'std :: string' (или любого не-POD-типа) в« union »- это плохая идея, если вы точно не знаете, что делаете. – hvd

+0

Почему «союз»? Это не удовлетворяет требованию хранить как 'int', так и' string' вместе. Вы все равно можете использовать 'struct' для их хранения, просто избавляйтесь от' union'. –

+0

Это не C-версия ответа @ SingerOfTheFall. Это ** непересекающееся объединение **: будет присутствовать только один из двух, и вы узнаете, какой из них. SingerOfTheFall предлагает ** продукт **: оба будут присутствовать. – nickie

2

Вы можете использовать std::pair или std::tuple,

std::list<std::pair<int, string>> list; 
Смежные вопросы