下面是关于c++primer 学习中,因为一个问题写的这段代码,这段代码不能运行通过,如果是把list改成vector就能通过
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <iterator>
#include <cctype>
using namespace std;
int main()
{
list<int>num{2,5,4,7,1,5,9,8};
map<list<int>::iterator,int>p;
list<int>::iterator q=num.begin();
int num1=1;
while(q!=num.end())
{
p[q];
p[q]=num1;
q++;
num1++;
}
for (auto k:p)
{
cout<<(*k.first)<<endl;
cout<<k.second<<endl;
}
return 0;
}
其实,对于 map<Key, T> ,类型 Key 必须支持 strict weak order ,默认使用 std::less<Key> 作为实现,其结果就是对 Key 使用 operator< 进行比较。
list<T>::iterator 是一个 BidirectionalIterator ,没有 operator< 的支持
vector<T>::iterator 是一个 RandomAccessIterator ,可以使用 < 对其进行比较