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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в мапе 
:(
    Опции темы
Step
Дата 20.9.2004, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



есть класс
Код

typedef struct tagPROCESSENTRY32 {
 DWORD dwSize;
 DWORD cntUsage;
 DWORD th32ProcessID;
 ULONG_PTR th32DefaultHeapID;
 DWORD th32ModuleID;
 DWORD cntThreads;
 DWORD th32ParentProcessID;
 LONG  pcPriClassBase;
 DWORD dwFlags;
 TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32;


Код

class CProcitem
{

public:
PROCESSENTRY32 info;
HTREEITEM item;
CProcitem(void);
CProcitem(PROCESSENTRY32 info,HTREEITEM item);
~CProcitem(void);
};

Код

map<CString, CProcitem> proc_arr;
typedef map<CString, CProcitem>::value_type varType2;
map<CString, CProcitem>::iterator it2;



как найти запись по значению info.th32ProcessID


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
DENNN
Дата 20.9.2004, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



перебором всех занчений, содержащихся в map/
PM ICQ   Вверх
mr.DUDA
Дата 20.9.2004, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Раз у тебя "info" лежит не в ключе, а в значении, то используй STL-овский алгоритм "find_if", перебирающий все value_type-элементы контейнера, с передачей в пользовательскую функцию (предикат). Сравниваемое значение нужно определить где-нибудь вне предиката. Того же результата можно добиться обычным перебором всех значений мапа в цикле for.
Код
#include <map>
#include <algorithm>

using namespace std;

typedef map<CString, CProcitem> MapProcArr;

// .....


DWORD lookUpProcessId = 0;

bool compare_func(const MapProcArr::value_type &val)
{
return val.second.info.th32ProcessID == lookUpProcessId;
}


void Test()
{
MapProcArr proc_arr;

lookUpProcessId = 123;
find_if(proc_arr.begin(), proc_arr.end(), compare_func);
}



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


Эксперт
****


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

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



Cпасибо


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Step
Дата 20.9.2004, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ошибка
term does not evaluate to a function

A call is made to a function through an expression. The expression does not evaluate to a function pointer. The following sample generates C2064:

Добавлено @ 14:52
ошибка
term does not evaluate to a function

A call is made to a function through an expression. The expression does not evaluate to a function pointer. The following sample generates C2064:



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Олег М
Дата 21.9.2004, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуй так
Код

typedef std::map<CString, CProcitem> MapProcArr;

struct _equal_pid : public std::binary_function<MapProcArr::value_type, DWORD, bool>
{ bool operator () (const MapProcArr::value_type &val, DWORD id) const {return val.second.info.th32ProcessID==id;} };

........................

MapProcArr proc_arr;
MapProcArr::iterator it=std::find_if(proc_arr.begin(),proc_arr.end(),std::binder2nd<_equal_pid>(_equal_pid(),100));

PM MAIL ICQ   Вверх
Step
Дата 21.9.2004, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Всем большое спасибо... все заработало...


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL 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.0617 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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