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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CMapStringToString, Как получить ключ по значению ? 
:(
    Опции темы
shedon
Дата 20.1.2004, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



Как в CMapStringToString получить ключ по его значению ?


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 20.1.2004, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



подсказка: POSITION в мелкософтовских Map-ах -- это то же самое, что "CAssoc *" smile.gif, который в свою очередь содержит "key".




--------------------
user posted image
PM MAIL WWW   Вверх
shedon
Дата 20.1.2004, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



Цитата
подсказка: POSITION в мелкософтовских Map-ах -- это то же самое, что "CAssoc *" , который в свою очередь содержит "key".

Я не зная, что такое CAssoc и POSITION, я бы может посидел подумал, у меня сейчас вообще времени в обрез, если не влом напиши код...


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 20.1.2004, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Я думал, у тебя есть POSITION в ассоциативном списке, но раз нет -- можно обойтись и без сложных преобразований:
Цитата
// создаём и заполняем CMap значениями
CMapStringToString the_map;
the_map["AAA"] = "BBB";
the_map["CCC"] = "DDD";

// если надо найти ключ, имея значение равное "BBB", то...
CString csKey, csValue;
bool bFound = false;
for(POSITION pos = the_map.GetStartPosition(); pos != NULL; the_map.GetNextAssoc(pos, csKey, csValue))
{
   if(csValue == "BBB")
  {
        bFound = true;
        break;
  }
}

После выхода из цикла, если bFound == true, то в csKey лежит значение ключа, соответствующее "BBB".


--------------------
user posted image
PM MAIL WWW   Вверх
shedon
Дата 21.1.2004, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



mr.DUDA, Спасибо..., а нет ли более быстрого алгоритма, без перебора(хотя мне пока и этого хватит) ?

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


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 21.1.2004, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Есть - STL smile.gif
Цитата
#pragma warning(disable: 4786)
#include <map>

// ....

typedef std::map<CString, CString> CMapStringToStringEx;
CMapStringToStringEx  the_map;

// заполняем список
the_map["AAA"] = "BBB";
the_map["CCC"] = "DDD";

// ищем значение "ААА"
CMapStringToStringEx::iterator i = the_map.find("AAA");

// если нашли - достаём ключ и значение
if(i != the_map.end())
{
      CString csKey = (*i).first;
      CString csValue = (*i).second;
}

В отличие от MFC-шных контейнеров, в мелкософтовской реализации STL данные хранятся в виде сбалансированного двоичного дерева - поиск занимает log2(N) итераций, где N - количество элементов.


--------------------
user posted image
PM MAIL WWW   Вверх
shedon
Дата 21.1.2004, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



mr.DUDA, thanks...


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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