Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поиск в map. / 25 сообщений из 26, страница 1 из 2
21.09.2015, 16:14
    #39057524
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Добрый день, коллеги!
Не могу победить эту ересь, помогите плиз.
Часов 5 уже убил.
Есть цикл, в котором одна колонка повторяется(mored_path.employeeID).
Мне надо, эти значения засунуть в map, исключив дубли.
Вроде все перепробовал, не пашет.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
					Цикл {
					....
					....
					mail_empl_find.employeeID = mored_path.employeeID;
					mail_empl = NULL;
					mail_empl = &mail_empl_find;
					/*if (!mail_step_map.empty()) // Проверка на инициализацию
					{
						map<char*, int>::iterator it_empl = mail_step_map.find(mored_path.employeeID); 
						if(it_empl != mail_step_map.end()) // Проверка на существование ID
						{
							 mail_step_map.erase(mored_path.employeeID);// Удаляем дублирующийся ID
							 mail_step_map[mored_path.employeeID] = 1;
							 break;
						}
					}*/
					/*
					if (!mail_step_map.empty()) // Проверка на инициализацию
					{
						map<char*, int>::iterator itr = mail_step_map.begin();
						while (itr != mail_step_map.end()) 
						{
							if (itr->first == mail_empl->employeeID) 
							{
								mail_step_map.erase(itr++);
							}
						}
					}*/
					/*if (!mail_step_map.empty()) // Проверка на инициализацию
					{
						std::map<char*,int>::iterator it;
						for (it=mail_step_map.begin(); it!=mail_step_map.end(); ++it)
						{
							if (it->first == mored_path.employeeID)
							{
								std::cout << it->first << " => " << it->second << '\n';
							}
						}
					}*/
					if (!mail_step_map.empty()) // Проверка на инициализацию
					{
						map<char*, int>::iterator it = mail_step_map.find(mored_path.employeeID); 
						if (it != mail_step_map.end())
						{
							it->second = 2;
							cout << "nafonfa" << endl;
						}
					}
					mail_step_map[mored_path.employeeID] = 1;
				}

...
Рейтинг: 0 / 0
21.09.2015, 16:16
    #39057528
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Такую проверку я уже делал, там проблем не было. А тут на тебе и убил полдня.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
					map<char*, char*>::iterator it = step_map.find(mored_execution_out->ip); 
					if(it != step_map.end()) // Проверка на существование этого IP адреса
					{
						 char* idx = it->second;
						 stmt3->setInt(1, atoi(idx));//insert FINISH status
						 stmt3->executeUpdate();
						 conn->commit();
						 step_map.erase(mored_execution_out->ip);// Удаляем использованную IP
					}
...
Рейтинг: 0 / 0
21.09.2015, 16:21
    #39057536
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
vadipok, у тебя вообще где итератор двигается? Где it++ ?
...
Рейтинг: 0 / 0
21.09.2015, 16:28
    #39057547
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
maytonvadipok, у тебя вообще где итератор двигается? Где it++ ?

Везде же есть. Посмотрите внимательнее. Там несколько попыток.
Например один взять отсюда тынц .
...
Рейтинг: 0 / 0
21.09.2015, 16:29
    #39057549
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Если не путаю - проблема тут
Код: plaintext
1.
map<char*, int>


у тебя в индексе не строки, а указатели, т.е. адреса.

надо переделать на
Код: plaintext
1.
map<string, int>


или
Код: plaintext
1.
map<char[10], int>
...
Рейтинг: 0 / 0
21.09.2015, 16:29
    #39057550
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
По сути в отличие между рабочим и не рабочим только в этом
Код: plaintext
1.
2.
map<char*, char*>::iterator it
map<char*, int>::iterator it
...
Рейтинг: 0 / 0
21.09.2015, 16:30
    #39057552
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Dima T,

Ага спасибо, вы успели раньше написать.
В принципе я предполагал что в этом проблема.
...
Рейтинг: 0 / 0
21.09.2015, 16:31
    #39057556
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Dima TЕсли не путаю - проблема тут
Код: plaintext
1.
map<char*, int>


у тебя в индексе не строки, а указатели, т.е. адреса.

надо переделать на
Код: plaintext
1.
map<string, int>


или
Код: plaintext
1.
map<char[10], int>



Стоп!

А почему тут не возникала такая проблема:
Код: plaintext
1.
map<char*, char*>::iterator it
...
Рейтинг: 0 / 0
21.09.2015, 16:35
    #39057562
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
vadipok, кормишь нас с ложечки сорцами. На даёшь тебе помочь.
...
Рейтинг: 0 / 0
21.09.2015, 16:36
    #39057566
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
vadipokСтоп!

А почему тут не возникала такая проблема:
Код: plaintext
1.
map<char*, char*>::iterator it


Вполне возможно там адреса были постоянны, например ссылки на другой мап. Просто не успело сглючить :)
...
Рейтинг: 0 / 0
21.09.2015, 16:41
    #39057580
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Dima T, понравилась формулировка.
Просто не успело сглючить :)
...
Рейтинг: 0 / 0
21.09.2015, 16:42
    #39057583
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Уже не смеюсь.
В С++ перестал удивляться всему.
...
Рейтинг: 0 / 0
21.09.2015, 16:58
    #39057609
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
vadipokВ С++ перестал удивляться всему.
При чём тут С++ когда ты тупо плаваешь в устройстве компьютера и работе с памятью?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.09.2015, 17:23
    #39057647
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
vadipok, немного не по теме.

Просто совет. С мапом удобнее так работать
Код: plaintext
1.
2.
3.
4.
typedef std::map<char*, int> mail_step_map_t;
mail_step_map_t mail_step_map;
...
mail_step_map_t::iterator it = ...



И второй вопрос: employeeID у тебя строка зачем? Там реально текст или "так получилось"? Если второе, то лучше вернись к int.
...
Рейтинг: 0 / 0
21.09.2015, 17:23
    #39057649
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Dimitry Sibiryakov,

Ну а почему он тут работает корректно?
Код: plaintext
1.
map<char*, char*>::iterator it



Я не спорю, я полный профан в С++.
Просто такие приколы выводят из колеи.
...
Рейтинг: 0 / 0
21.09.2015, 17:25
    #39057653
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Dima Tvadipok, немного не по теме.

Просто совет. С мапом удобнее так работать
Код: plaintext
1.
2.
3.
4.
typedef std::map<char*, int> mail_step_map_t;
mail_step_map_t mail_step_map;
...
mail_step_map_t::iterator it = ...



И второй вопрос: employeeID у тебя строка зачем? Там реально текст или "так получилось"? Если второе, то лучше вернись к int.

Там char*.
Это два разных места, рабочий вариант на своем месте, и работает он корректно.
...
Рейтинг: 0 / 0
21.09.2015, 17:29
    #39057657
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
vadipokНу а почему он тут работает корректно?
Эта строка ничего не делает и не показывает время жизни значений по ссылкам. Так что
единственное объяснение почему она работает - "дуракам везёт".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.09.2015, 17:33
    #39057663
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Dimitry SibiryakovvadipokНу а почему он тут работает корректно?
Эта строка ничего не делает и не показывает время жизни значений по ссылкам. Так что
единственное объяснение почему она работает - "дуракам везёт".

Вот я и упоролся на пол дня.
Придется рабочий вариант тоже переделать.
Всем спасибо!
...
Рейтинг: 0 / 0
21.09.2015, 17:41
    #39057668
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
vadipokработает он корректно.
Он работает только потому что ты случайно соблел правила не понимая их. Как только ты правила нарушишь - работать перестанет.
Вот тебе пример для медитации
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
typedef std::map<char*, int> test_t;
test_t test_map;

void test()
{
	char* x = "test";
	test_map[x] = 1;
	char* y = x;
	char z[5];
	strcpy(z, x);
	if(test_map.find(x) != test_map.end()) printf("found x\n");
	if(test_map.find(y) != test_map.end()) printf("found y\n");
	if(test_map.find(z) == test_map.end()) printf("Not found z\n");
}

Результатfound x
found y
Not found z
Потрать время, пойми почему так.
...
Рейтинг: 0 / 0
21.09.2015, 18:00
    #39057683
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
Обрати внимание на мой вопрос
Dima TИ второй вопрос: employeeID у тебя строка зачем? Там реально текст или "так получилось"? Если второе, то лучше вернись к int.
Этим ты порешаешь текущие проблемы и, скорее всего, будущие.
...
Рейтинг: 0 / 0
21.09.2015, 18:23
    #39057699
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
vadipokВот я и упоролся на пол дня.
Придется рабочий вариант тоже переделать.
Специально для таких случаев были изобретены языки без указателей: Java, PHP, Perl, Lua.
Последний для работы с map весьма рекомендую.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.09.2015, 19:46
    #39057757
ДохтаР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
vadipokУже не смеюсь.
В С++ перестал удивляться всему.

Если хотите не удивляться и понять почему так
гляньте еще раз в примеры из документации .

авторstd::map<char,int> ::key_compare ......




Ваш код исключает повторение одной и тойже строки
(области памяти) в разных парах.

Но разные строки ( области памяти)
с одинаковым текстом ( дубли ) он исключать не будет.
...
Рейтинг: 0 / 0
22.09.2015, 00:10
    #39057876
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
vadipokDimitry Sibiryakov,

Ну а почему он тут работает корректно?
Код: plaintext
1.
map<char*, char*>::iterator it



Я не спорю, я полный профан в С++.
Просто такие приколы выводят из колеи.

Он не работает, просто тебе кажется, что он работает.

И на самом деле ты даже можешь очень аккуратно работать с этим кодом, и он БУДЕТ работать в ограниченных случаях, главное -- знать, что делаешь и границы не переходить.
Это ж по сути -- таблица атомов.
...
Рейтинг: 0 / 0
22.09.2015, 00:14
    #39057877
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
А мне не нравится сам алгоритм.
Эту портянку не читал даже -- там должно быть всё короче и проще.

авторЕсть цикл, в котором одна колонка повторяется(mored_path.employeeID).
Мне надо, эти значения засунуть в map, исключив дубли.

Чтобы это сделать , надо тупо пройтись по всем записям и каждое значение положить в map, а он
уже там сам разберётся, где там уникальное, где -- нет, и на выходе даст список уникальных.
Нужно только не забыть и правильно определить std::less для ключей -- хотя для строк это уже сделано.
...
Рейтинг: 0 / 0
22.09.2015, 12:58
    #39058248
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в map.
MasterZivЧтобы это сделать , надо тупо пройтись по всем записям и каждое значение положить в map, а он
уже там сам разберётся, где там уникальное, где -- нет, и на выходе даст список уникальных.
Нужно только не забыть и правильно определить std::less для ключей -- хотя для строк это уже сделано.

+100500, работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
					std::string str(mored_path.employeeID);
					if (!mail_step_map.empty()) // Проверка на инициализацию
					{
						mail_step_map[str] = 1;
					}
					mail_step_map[str] = 1;
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поиск в map. / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]