2013-05-22 4 views
0

У меня естьC++: Карта <wstring, wstring> Получение второго из первого

map <wstring,wstring>. 

Я вставленные пары, как это:

m_Translations.Content().insert(pair<wstring,wstring>(L"rome",L"roma")); 
m_Translations.Content().insert(pair<wstring,wstring>(L"water",L"aqua")); 

Как я мог определить перевод "вода" из карта? Другими словами: Я хотел бы получить второй предмет из первого. Поиск с учетом регистра.

Благодарим за помощь!

+2

'wstring s = m_Translations.Content() [L "вода"] ; ' –

+0

@AlexFarber: Вы, вероятно, не хотите вставлять пустую запись, если она отсутствует. –

+0

@Mike Seymour - это разница между подсказкой, опубликованной как комментарий, и полным ответом. –

ответ

4

Немного странный вопрос. Как насчет стандартного способа доступа к карте с помощью operator[]?

wstring aqua = m_Translations.Content()[L"water"]; 

В случае, если вы не уверены, существует ли перевод или нет, вы можете проверить его с помощью find метода:

const auto& dict = m_Translations.Content(); 
auto pAqua = dict.find(L"water"); 

if (pAqua != dict.end()) 
{ 
    // Found it! 
} 
else 
{ 
    // Not there... 
} 
+0

Спасибо. Что это за «авто»? – tmighty

+1

Это стиль C++ 11. Это означает, что тип переменной автоматически выводится из инициализирующего выражения. Вы можете переписать его с явным объявлением типа. – Mikhail

+0

Почему бы не использовать метод 'at'? Исключение будет выбрано, если ни один элемент не существует с указанным ключом. – soon

3

Вы можете использовать operator[], имеющийся на std::map.

Например:

map<wstring, wstring> myMap = m_Translations.Content(); 

myMap.insert(pair<wstring, wstring>(L"rome", L"roma")); 
myMap.insert(pair<wstring, wstring>(L"water", L"aqua")); 

// waterText value would be 'aqua' 
wstring waterText = myMap[L"water"]; 
Смежные вопросы