Ламерский вопрос про std::set
От: Аноним  
Дата: 24.07.11 20:14
Оценка:
Добрый вечер всем!
Есть пара тупых вопросов про std::set. Компилятор — Visual C++ 2010.
1. Как в следующем коде сделать так, что внутри set элементы сортировались не по значениям указателей, а по значениям того, на что указывают указатели?
2. Как сделать так, чтобы при этом срабатывало равенство set3 == set4? Сейчас оно не срабатывает.

set<int*> set3, set4;

int array1 [10] = {0, 1, 2, 0, 1, 2};

set3.insert(&array1 [0]);
set3.insert(&array1 [1]);
set3.insert(&array1 [2]);

set4.insert(&array1 [3]);
set4.insert(&array1 [4]);
set4.insert(&array1 [5]);

if (set3 == set4)
    cout << "set3 == set4" << endl;
else
    cout << "set3 != set4" << endl;
Re: Ламерский вопрос про std::set
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 24.07.11 20:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый вечер всем!

А>Есть пара тупых вопросов про std::set. Компилятор — Visual C++ 2010.
А>1. Как в следующем коде сделать так, что внутри set элементы сортировались не по значениям указателей, а по значениям того, на что указывают указатели?
bool bByPtrIntLess( int *p1, int *p2)
{
return *p1 < *p2;
}
set<int*, bByPtrIntLess> set3, set4;


А>2. Как сделать так, чтобы при этом срабатывало равенство set3 == set4? Сейчас оно не срабатывает.

Пройдись по элементам первого сета и поищи их во втором. Если хоть один не нашелся, то не равны. Перед началом сравни размеры, если разные, то множества точно не равны.
Я как-то задался подобным вопросом, поковырял stl, там что-то было подходящее, но оно как-то не так работало, как я хотел, сделал как выше.
Маньяк Робокряк колесит по городу
Re[2]: Ламерский вопрос про std::set
От: ononim  
Дата: 24.07.11 21:07
Оценка:
А>>2. Как сделать так, чтобы при этом срабатывало равенство set3 == set4? Сейчас оно не срабатывает.
M>Пройдись по элементам первого сета и поищи их во втором. Если хоть один не нашелся, то не равны. Перед началом сравни размеры, если разные, то множества точно не равны.
M>Я как-то задался подобным вопросом, поковырял stl, там что-то было подходящее, но оно как-то не так работало, как я хотел, сделал как выше.
Достаточно пройтись по элементам от begin до end каждого сета, сравнивая каждый элемент, ибо порядок элементов гарантирован и определен предикатом.
Как много веселых ребят, и все делают велосипед...
Re[3]: Ламерский вопрос про std::set
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 24.07.11 22:20
Оценка:
Здравствуйте, ononim, Вы писали:

M>>Пройдись по элементам первого сета и поищи их во втором. Если хоть один не нашелся, то не равны. Перед началом сравни размеры, если разные, то множества точно не равны.

O>Достаточно пройтись по элементам от begin до end каждого сета, сравнивая каждый элемент, ибо порядок элементов гарантирован и определен предикатом.
Точно, я так и сделал Почему-то правда запомнилась первая глупая мысль
Маньяк Робокряк колесит по городу
Re: Ламерский вопрос про std::set
От: Centaur Россия  
Дата: 25.07.11 03:57
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Добрый вечер всем!

А>Есть пара тупых вопросов про std::set. Компилятор — Visual C++ 2010.
А>1. Как в следующем коде сделать так, что внутри set элементы сортировались не по значениям указателей, а по значениям того, на что указывают указатели?
А>2. Как сделать так, чтобы при этом срабатывало равенство set3 == set4? Сейчас оно не срабатывает.

Не храни целые числа в множестве по указателю, храни по значению.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.