我想遍历具有3个元组作为键的映射(pro_r)。映射是称为实例的结构的属性。当我尝试将迭代器初始化为地图的开头时,它给了我一个错误。
我尝试对本地定义的地图(您好)执行相同操作,但它没有给我任何错误。
#include <iostream>
#include <utility> // std::pair, std::make_pair
#include <tuple> // std::pair, std::make_pair
#include <string> // std::string
#include <map>
using namespace std;
typedef tuple<int,int,int> tup3Int;
bool tup_comp (const tup3Int& lhs, const tup3Int& rhs) {
return ( get<2>(lhs) < get<2>(rhs) ) ||
((get<2>(lhs) == get<2>(rhs)) && (( get<0>(lhs) < get<0>(rhs) ))) ||
((get<2>(lhs) == get<2>(rhs)) && (( get<0>(lhs) == get<0>(rhs) )) && (( get<1>(lhs) < get<1>(rhs) ))) ;
}
struct Instance_data{
map<tup3Int,double, bool(*)(const tup3Int&,const tup3Int&)> pro_r;
};
int main ()
{
Instance_data instance;
bool(*tup_comp_ptr)(const tup3Int&,const tup3Int&) = tup_comp;
instance.pro_r = map<tup3Int,double,bool(*)(const tup3Int&,const tup3Int&)>(tup_comp_ptr);
map<tup3Int,int,bool(*)(const tup3Int&,const tup3Int&)>::const_iterator iter3 = instance.pro_r.begin();
map<tup3Int,int,bool(*)(const tup3Int&,const tup3Int&)> hello;
map<tup3Int,int,bool(*)(const tup3Int&,const tup3Int&)>::const_iterator iter2 = hello.begin();
return 0;
}
错误:从'std :: map,double,bool(*)(const std :: tuple&,const std :: tuple&)> :: iterator {aka std :: _ Rb_tree_iterator,double>>}'转换为non -标量类型'std :: map,int,bool(*)(const std :: tuple&,const std :: tuple&)> :: const_iterator {aka std :: _ Rb_tree_const_iterator,int>>}'已请求 map :: const_iterator iter3 = pro_r.begin();