gpt4 book ai didi

c++ - std::rotate 参数不正确?

转载 作者:行者123 更新时间:2023-11-30 03:40:35 24 4
gpt4 key购买 nike

我有一个包含 unordered_map 迭代器的 vector ,我想在迭代器上使用 std::rotate,但我一定遗漏了一些东西。

代码在我做类似的事情时有效

std::vector<std::unordered_map<int, int>::iterator> _lruList;

void used(std::unordered_map<int, int>::iterator& it, int type) {
if (type == 0) {
auto item = _lruList.begin();
while (item != _lruList.end()){
if (*item == it){
std::rotate(item, item + 1, _lruList.end());
return;
}
item++;
}
}
}

但我希望代码像这样工作,因为这个函数被调用了很多,其中额外的 while 循环增加了额外的不必要的时间复杂度

std::vector<std::unordered_map<int, int>::iterator> _lruList;
void used(std::unordered_map<int, int>::iterator& it, int type) {
if (type == 0) {
std::rotate(it, it + 1, _lruList.end()); //error on it
return;
}
}

编辑:更多代码,我看到它的类型和 _lruList.end() 冲突。无论如何,我是否可以解决此问题以在不遍历 vector 的情况下仍然完成我想做的事情?

进一步调试后,根据 VS2015,it + 1 似乎给了我一个“错误类型”

std::unordered_map<int, int>::iterator found = _cache.find(key);
// if key doesn't exist, return -1
if (found == _cache.end()) {
return -1;
}
// if key exists, return value and update lru
used(found, 0);
return found->second;

如果这有助于回答我的问题,我可以提供更多代码片段。

如有任何帮助,我们将不胜感激!

最佳答案

void used(std::unordered_map<int, int>::iterator& it, int type) {
if (type == 0) {
std::rotate(it, it + 1, _lruList.end()); //error on it
return;
}
}

在这个函数中,it(和it + 1)是类型

std::unordered_map<int, int>::iterator

但是_lruList.end()是完全不同的类型

std::vector<std::unordered_map<int, int>::iterator>::iterator

std::rotate 的所有三个参数必须属于同一类型(以及来自同一容器)。所以我不知道你想做什么,但这个电话显然行不通:

std::rotate(it, it + 1, _lruList.end());

关于c++ - std::rotate 参数不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37903906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com