Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > CMapStringToString


Автор: shedon 20.1.2004, 16:01
Как в CMapStringToString получить ключ по его значению ?

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


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

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

Автор: mr.DUDA 20.1.2004, 17:33
Я думал, у тебя есть 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".

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

Автор: mr.DUDA 21.1.2004, 11:36
Есть - 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 - количество элементов.

Автор: shedon 21.1.2004, 13:16
mr.DUDA, thanks...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)