В некоторых std
библиотека template
«s параметра, которого необходимо определить его/ее собственную функцию компаратора less(a, b)
, more(a, b)
затем std::some_template<T, *, myComparator()>
, но почему?Почему бы нам еще нужно определить свою собственную функцию компаратора
ответ
Целью компаратора является сортировка объектов в сортированных контейнерах stl. Вам нужно только предоставить свой собственный компаратор, если по умолчанию он не подходит для типа объекта, который будет храниться в контейнере.
Например, если вы должны были сделать std :: set из следующих struct
, тогда вам нужно будет написать собственный компаратор.
struct Person
{
std::string first_name, last_name, phone_number;
}
Компаратор по умолчанию знает, как сравнивать числа и строки, но он не знает, как сравнивать объекты Person. Вот как можно было написать пользовательский компаратор для сортировки объектов Person по имени last_name.
struct Person_Comparator
{
bool operator()(const Person &a, const Person &b) const {
return a.last_name < b.last_name;
}
};
Другой пример позволяет сделать ряд с некоторой иной критерий
int main()
{
//By default set will use std::less<int>()
//Lets make a set based on no. of 1's in binary representation of elements
set<int,mycomp> s;
for(auto i=1;i<20;i++) //Note :Duplicates 1's representation will be discarded
s.insert(i);
for(auto i:s)
cout<<i<< " "; //19 15 8 7 3 1
return 0;
}
И соответствующего компаратора будет что-то вроде следующего:
struct mycomp
{
bool operator()(const int& a, const int& b) const {
auto count_bits = [](long n){
unsigned int c;
for (c = 0; n; c++)
n &= n - 1;
return c;
};
return count_bits(a) != count_bits(b);
}
};
Мы все еще иногда нужно определить свою собственную функцию компараторы в общем программировании, но нам не всегда нужно писать сами). Вы можете просто использовать этот онлайн-мастер [http://www.xochellis.org/genericdataordering/wizard .php], чтобы создать строго-слабоупорядочивающие функторы или лямбды, которые вам нужны.
Например, в примере примера Person_Comparator
вы должны просто заполнить три поля в форме мастера, например, this picture.
Для получения более подробной информации вы можете обратиться here, а также:
С наилучшими пожеланиями, Джим Xochellis
- 1. Дать свою собственную функцию
- 2. создавая свою собственную функцию strdup
- 3. Создайте свою собственную функцию String
- 4. jquery создать свою собственную функцию?
- 5. создать свою собственную функцию cellfun
- 6. Переписать в свою собственную функцию
- 7. Почему нам нужно избегать CSS?
- 8. Почему нам нужно определить конструкторы в JavaScript
- 9. dplyr - from group_by в свою собственную функцию
- 10. Как определить собственную собственную функцию агрегации SQL?
- 11. Как написать свою собственную максимальную функцию
- 12. Как написать и реализовать свою собственную функцию
- 13. Применить свою собственную функцию dplyr tbl_df
- 14. Функция Inline (C++) эффективна, почему бы нам не определить каждую функцию как встроенную функцию?
- 15. реализовать свою собственную функцию PLOMB в MATLAB
- 16. Как я могу обещать свою собственную функцию?
- 17. создать свою собственную функцию MemSet в с
- 18. Почему нам нужно np.squeeze()?
- 19. Почему Arrays.asList() возвращает свою собственную реализацию ArrayList
- 20. Как заставить функцию вызвать свою собственную функцию при ее создании
- 21. CRT, нам все еще нужно перераспределять его?
- 22. Почему Leiningen сохраняет свою собственную JVM?
- 23. Зачем определять свою собственную процедуру/функцию при использовании СУБД?
- 24. Почему нам нужно Downcasting действительно?
- 25. mongodb Почему нам нужно getSisterDB
- 26. Нам еще нужно использовать `[...]` в Bash?
- 27. CSS3: Нам еще нужно использовать префиксы браузера?
- 28. Как создать свою собственную коллекцию?
- 29. Почему нам нужно переопределить terminate()?
- 30. Почему нам нужно использовать prompt.start()?
что же делать "СТЛ"? –
Все они имеют свой компаратор по умолчанию. Его все на намерении программиста – P0W
@ H2CO3 Я не знаю, что назвать этому термину, поэтому я просто называю это stl, извините – mr5