std ::旋转参数不正确

std::rotate arguments not correct?

本文关键字:不正确 参数 旋转 std      更新时间:2023-10-16

我有一个 unordered_map的迭代器,我想在迭代器上使用 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++;
        }
    }
}

,但我希望代码像这样起作用,因为此功能被称为很多,其中额外的循环添加了额外的未记录时间复杂性

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()冲突。无论如何,我是否可以解决这个问题,仍然可以完成我想做的事情,而无需通过向量迭代?

在进行进一步调试后,it + 1似乎根据VS2015给我"error type"

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());