Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Map в качестве ключа map-а 
:(
    Опции темы
Avatarchik
Дата 2.6.2011, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.7.2009

Репутация: нет
Всего: нет




Есть файл 


Код

<label name="form.1.menu.file">
                <translate lang="ru" value="Файл"/>
                <translate lang="ua" value="Файлы"/>    
</label>
 <label name="form.1.menu.exit">
                <translate lang="ru" value="Выход"/>
                <translate lang="ua" value="Вихід"/>    
</label>


enum Language{UA,RU};
Я его прочитал и записал в такой map (map<string, map<Language, string> >);
Потом пытаюсь найти определенный лейбл, 
string keyLabel = "form.1.menu.exit";
map<string, map<Language, string> >::iterator itr = langHashtable.find(keyLabel);
Все находит.
Потом пытаюсь найти язык в этом лейбле.
map<Language, string>::iterator inneritr = itr->second.find(UA);
Но выводит всегда значение этого лейбла (в зависимости какой я язык укажу) <translate lang="ru" value="Файл"/> или <translate lang="ua" value="Файлы"/>

Это сообщение отредактировал(а) Avatarchik - 2.6.2011, 08:23
PM MAIL   Вверх
boostcoder
Дата 2.6.2011, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



boost.property_tree не предлагать? ;)
PM WWW   Вверх
IKM2007
Дата 2.6.2011, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Цитата(Avatarchik @  2.6.2011,  08:22 Найти цитируемый пост)
Потом пытаюсь найти язык в этом лейбле.
map<Language, string>::iterator inneritr = itr->second.find(UA);
Но выводит всегда значение этого лейбла (в зависимости какой я язык укажу)

Потому что ты ищешь элемент по ключу "UA". Если тебе нужно просто узнать есть ли такой элемент в списке, то можно так.

Код

if( inneritr == itr->second.end() )
    std::cout<<"Not found.\n";
else
    std::cout<<"Is ok.\n";



--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Avatarchik
Дата 2.6.2011, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.7.2009

Репутация: нет
Всего: нет



Цитата

boost.property_tree не предлагать? ;) 

Спс, но нужно стандартными библиотеками решить.

Добавлено через 5 минут и 4 секунды
Цитата(IKM2007 @ 2.6.2011,  08:33)
Цитата(Avatarchik @  2.6.2011,  08:22 Найти цитируемый пост)
Потом пытаюсь найти язык в этом лейбле.
map<Language, string>::iterator inneritr = itr->second.find(UA);
Но выводит всегда значение этого лейбла (в зависимости какой я язык укажу)

Потому что ты ищешь элемент по ключу "UA". Если тебе нужно просто узнать есть ли такой элемент в списке, то можно так.

Код

if( inneritr == itr->second.end() )
    std::cout<<"Not found.\n";
else
    std::cout<<"Is ok.\n";

Нет мне нужно,
1.нашел я лелйбл в мапе "form.1.menu.exit" - все находит
2.надо найти у найденного ключа тег с каким то языком  например ru, и вывести значение value


Это сообщение отредактировал(а) Avatarchik - 2.6.2011, 08:34
PM MAIL   Вверх
IKM2007
Дата 2.6.2011, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Насколько понял это имелось ввиду?
Код

#include <iostream>
#include <cstdlib>
#include <string>
#include <map>

int main()
{

    std::map<std::string, std::map<std::string, std::string> > map;

    std::map<std::string, std::string> map1;
    map1["ru"] = "File";
    map1["ua"] = "Files";

    std::map<std::string, std::string> map2;
    map2["ru"] = "Exit";
    map2["ua"] = "Quit";

    map["form.1.menu.file"] = map1;
    map["form.1.menu.exit"] = map2;

    ////////////////////////////////////

    std::string keyLabel = "form.1.menu.exit";
    std::map<std::string, std::map<std::string, std::string> >::iterator itr =
            map.find(keyLabel);
    std::map<std::string, std::string>::iterator inneritr = itr->second.find("ua");

    if( inneritr == itr->second.end() )
        std::cout<<"Not found.\n";
    else
    {
        std::cout<<"Language : "<<(*inneritr).first
                <<" Value : "<<(*inneritr).second<<"\n";
    }

    system("pause");
    return 0;
}


http://liveworkspace.org/code/469983262fc5...6487113af01b845


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
RastaDja
Дата 2.6.2011, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: 3
Всего: 5



вот смотри, 
Код

#include "stdafx.h"
#include <iostream>
#include <map>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    enum Language{UA=0,RU=1};
    map<string, map<Language, string> > mm;
    map <Language, string> a;
    a[UA] = "uaKey1";
    a[RU] = "ruKey1";
    map <Language, string> b;
    b[UA] = "uaKey2";
    b[RU] = "ruKey2";
    mm["key1"] = a;
    mm["key2"] = b;

    map<string, map<Language, string> >::iterator itr = mm.find("key1");
    map <Language, string>::iterator keyItr;
    keyItr = itr->second.find(RU);
    cout << keyItr->first << " " << keyItr->second;
    return 0;
}

код кривоват, но главное идея

Это сообщение отредактировал(а) RastaDja - 2.6.2011, 09:09


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Avatarchik
Дата 2.6.2011, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.7.2009

Репутация: нет
Всего: нет



Спасибо, огромное smile Все работает smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1047 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.