Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用向量/列表迭代器作为键创建映射_C++_List_Dictionary_Vector_Iterator - Fatal编程技术网

C++ 使用向量/列表迭代器作为键创建映射

C++ 使用向量/列表迭代器作为键创建映射,c++,list,dictionary,vector,iterator,C++,List,Dictionary,Vector,Iterator,我对这段代码中g++中这个巨大错误的原因感到困惑: #include<iostream> #include<map> #include<utility> #include<vector> #include<list> using namespace std; int main() { list<int> p={1,2,3,4}; map<list<int>::iterator, int

我对这段代码中g++中这个巨大错误的原因感到困惑:

#include<iostream>
#include<map>
#include<utility>
#include<vector>
#include<list>

using namespace std;

int main()
{
    list<int> p={1,2,3,4};

    map<list<int>::iterator, int> q;

    q[p.begin()]=9991;

    cout<<q[p.begin()]<<endl;
    return 0;
}
使用列表时出错,但使用向量时出错-为什么?我从理论上理解列表\向量的行为,但仍然找不到原因

错误:


错误:“运算符不匹配标准类std::list具有双向迭代器,但没有运算符标准类std::list具有双向迭代器,但没有运算符,因此基本上迭代器保留地址,因此无法对其进行比较,因为列表中的内存不连续?@AgrudgeAmicus一般来说,<运算符不是为双向迭代器定义的,正如您正确提到的,列表节点的地址不能进行比较。@列表中的AgrudgeAmicus迭代器只知道它们的当前、上一个和下一个元素。所以,如果两个迭代器引用的元素之间的间隔超过1个元素,它们就无法区分哪个元素先到。元素的地址不能用于此操作。无法知道较高的地址是指序列中较早出现的元素还是较晚出现的元素。列表元素可以遍布内存中的所有位置。因此,由于比较只能在理论上对有限的迭代器对集起作用,因此不可能为它们实现一个通用的大小写比较运算符。@AgrudgeAmicus请参阅我更新的帖子,其中附带了std::map的类模板声明。@AgrudgeAmicus地址无关紧要。列表中的元素可以在内存中来回移动。没有要求内存中的顺序与容器中的顺序匹配。因此,基本上迭代器保存着地址,因此无法对它们进行比较,因为列表中的内存是不连续的?@AgrudgeAmicus一般来说,运算符<不是为双向迭代器定义的,正如您正确提到的,列表节点的地址不能进行比较比较。@列表中的AGRUDGEMICUS迭代器只知道它们的当前、上一个和下一个元素。所以,如果两个迭代器引用的元素之间的间隔超过1个元素,它们就无法区分哪个元素先到。元素的地址不能用于此操作。无法知道较高的地址是指序列中较早出现的元素还是较晚出现的元素。列表元素可以遍布内存中的所有位置。因此,由于比较只能在理论上对有限的迭代器对集起作用,因此不可能为它们实现一个通用的大小写比较运算符。@AgrudgeAmicus请参阅我更新的帖子,其中附带了std::map的类模板声明。@AgrudgeAmicus地址无关紧要。列表中的元素可以在内存中来回移动。不要求内存中的顺序与容器中的顺序匹配。
template<class Key, class T, class Compare = less<Key>,
class Allocator = allocator<pair<const Key, T>>>
class map;