遍历元组映射作为键

时间:2019-08-01 16:55:06

标签: c++11 dictionary iterator tuples comparator

我想遍历具有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();

0 个答案:

没有答案