Я пытаюсь упорядочить wordItems в порядке убывания wordCount в наборе.
Я нахожусь в структурах данных, и наш профессор ставит перед нами задачи по использованию контейнеров STL в предыдущих заданиях. Причина, по которой здесь используется std :: set, заключается в том, что мой профессор хочет показать нам, как на практике использовать STL BST.
Я не могу понять, std::set
и все его функции ...
Вот то, что я считаю соответствующим кодом, относящимся к моей структуре wordItem:
// header file (HashTable.hpp)
struct wordItem
{
std::string word;
int count;
wordItem* next;
};
struct comp
{
// I have also tried bool operator<()(wordItem const &lhs, wordItem const &rhs)
bool operator()(wordItem const &lhs, wordItem const &rhs) const {
if (lhs.count == rhs.count) {
return lhs.word > rhs.word;
}
return lhs.count > rhs.count;
}
};
И вот моя функция, которая фактически использовала бы этот набор:
// implementation file (HashTable.cpp)
#include "HashTable.hpp"
void HashTable::printTopN(int n) {
set<wordItem,comp> s;
for (int i = 0; i < hashTableSize; i++) {
if (hashTable[i] != nullptr) {
wordItem *temp = hashTable[i];
s.insert(*temp);
while (temp->next != nullptr) {
temp = temp->next;
s.insert(*temp);
}
}
}
}
Однако я получаю сообщение об ошибке, в котором говорится, что я использую необъявленные идентификаторы. И comp
, и s
вызывают это ...
Это точное сообщение об ошибке:
HashTable2.cpp:129:16: error: use of undeclared identifier 'comp'
set<wordItem,comp> s;
^
HashTable2.cpp:134:7: error: use of undeclared identifier 's'
s.insert(*temp);
^
HashTable2.cpp:137:9: error: use of undeclared identifier 's'
s.insert(*temp);
^
Предполагается, что набор должен содержать wordItem
с наибольшим первым wordCount
, и если два слова имеют одинаковое количество, прерыватель связей должен быть в лексикографическом порядке.
Мне кажется, что проблема, вероятно, связана с тем, что я, вероятно, неправильно сравниваю эти wordItem
Наконец, я прошу прощения, потому что я предполагаю, что смешивать мои собственные пользовательские структуры данных со структурами STL очень грязно, но любая помощь будет принята с благодарностью