【发布时间】:2016-11-12 04:14:16
【问题描述】:
我正在尝试按值而不是键对集合进行排序。我一直遇到非法间接问题。每次我尝试通过 LRU 缓存插入时都会发生错误。我认为这个问题与不使用指针有关,所以我将 a 和 b 转换为指针,但它不起作用。
struct comp {
bool operator ()(const pair<int, int>& a, const pair<int, int>& b) {
return a.second < b.second;
}
};
typedef set<pair<int, int>, comp> S;
struct LRUCache {
S cache;
typedef S::iterator it;
int cap;
LRUCache(int capacity) {
cap = capacity;
}
int get(int key) {
}
void setC(int key, int value) {
cache.insert(key, value);
}
void initialize() {
vector<int> temp{ 5,20,35,20,83,17,5,1,0,239,242,42 };
for (int i = 0; i < temp.size(); i++) {
setC(i, temp[i]);
}
}
};
int main()
{
LRUCache test(5);
test.initialize();
test.setC(1, 5);
test.setC(12, 20);
return 0;
}
【问题讨论】:
-
完整的错误是什么?你可能也想处理这个例子,因为它编译得很好。 ideone.com/GjT4aD
-
对不起。我的 IDE 中只有那部分出现了同样的错误,所以我认为它只是那段代码。
-
cache.insert(make_pair(key, value));或cache.insert({key, value});可能是您想要的。 -
另外,我不建议使用像
S这样的单字母名称来定义您的类型。这不会向阅读您的代码的人传达任何信息。相反,将其命名为IntSet或更具描述性的名称。