我试图按值而不是键对集合进行排序。我一直遇到非法的间接问题。每次我尝试通过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;
}
答案 0 :(得分:0)
问题是,您的std::set
由std::pair<int, int>
组成,并且您没有使用此行将该类型插入到您的集合中:
cache.insert(key, value);
这会调用带有两个参数的set::insert
函数,编译器会尝试匹配您使用one of the overloads here that takes two parameters传递的两个int
值。
相反,您要做的是使用单个参数调用set::insert
,即std::pair<int, int>
。
将以上行更改为:
cache.insert({key, value});
或
cache.insert(std::make_pair(key, value));
如果您对using
使用typedef
或std::pair
,您也可以更清楚地看到问题。
typedef std::pair<int, int> IntPair;
typedef std::set<IntPair, comp> PairSet;
//...
PairSet cache;
//...
cache.insert(IntPair(key, value));
您知道要将IntPair
插入到集合中,因此上面的代码编译时没有问题。