【发布时间】:2021-06-17 18:28:21
【问题描述】:
我正在关注一个哈希表实现教程并遇到了这个:
class HashTable {
private:
static const int hashGroups = 10;
std::list<std::pair<int,std::string>> table[hashGroups];
bool HashTable::isEmpty() const {
int sum{};
for(int i{}; i < hashGroups; i++) {
sum += table[i].size();
}
if(!sum) {
return true;
}
return false;
}
在isEmpty()成员函数中,为什么table[i].size()有效?在我的解释中,table 是一个对的列表,因此,table[i] 应该在索引 [i] 处返回一对。但是,std::pair 中没有成员函数 size()。
【问题讨论】:
-
关注
std::list<std::pair<int,std::string>>很容易——对于学习这门语言的人来说,这是一个可怕的标点符号,但另一个你可能已经意识到你所做的事情是当你想到 “table[i]应该在index [i]返回一对” - 因为列表数据结构不能随机索引,标准库没有为std::list提供operator[](size_t)成员 - 这几乎是令人鼓舞的初学者编写非常低效的代码。检查这些东西的好地方是en.cppreference.com/w/cpp/container/list