Я создал набор C-строк, предоставив собственную функцию сравнения, потому что я хотел, чтобы она учитывала только первые три символа.Вот его определение:
struct set_object {
bool operator()(const char* first, const char* second) {
return strncmp(first, second, 3) > 0;
}
};
std::set<const char*, set_object> c_string_set;
Это работает так, как я хотел, сортируя строки по мере их добавления так, как я обрисовал в общих чертах в классе set_object.Но интересная часть начинается, когда я пытаюсь добавить строку, которая сравнивается с уже добавленной строкой.Например, если я пытаюсь добавить «aaab», когда в наборе уже есть «aaa», он не добавляется в набор.Если я сначала добавлю «aaab», а затем попробую добавить «aaa», в нем будет только «aaab».Но как он узнает, когда они равны , если я только предоставил функцию, которая возвращает true, когда одна из строк больше?Он должен возвращать false, когда он или равен или меньше!
Для пояснения, это не проблема, просто попытаться выяснить, как работает C ++.