假设我有:map<map_data, int, decltype(compare)> the_map
struct map_data{
int data1;
int data2;
}
我尝试过将compare写成:
struct
{
bool operator()(map_data one, map_data two) const
{
if(one.data1 == two.data1)
return one.data2 > two.data2;
else
return one.data1 < two.data1;
}
}compare;
但是我收到了很多编译错误。我在这里做错了吗?
答案 0 :(得分:2)
我想它必须如此:
struct compare
{
bool operator()(map_data const& one, map_data const& two) const
{
if(one.data1 == two.data1)
return one.data2 > two.data2;
else
return one.data1 < one.data2;
}
};
此外,您不需要decltype
。直接使用仿函数类的名称:
std::map<map_data, int, compare> the_map;
// ^^^^^^^
在这里,您可以看到上面代码编译的live example。
答案 1 :(得分:1)
您在map_data
定义后忘记了分号。修复,compilation in C++11 is successful :
#include <map>
using std::map;
struct map_data{
int data1;
int data2;
};
struct
{
bool operator()(map_data one, map_data two) const
{
if(one.data1 == two.data1)
return one.data2 > two.data2;
else
return one.data1 < two.data1;
}
}compare;
int main() {
map<map_data, int, decltype(compare)> the_map;
}
然而,为此要求C ++ 11 decltype
似乎有点浪费,并且当你真正需要的只是类型时实例化一个对象compare
。
为什么不be conventional?
#include <map>
using std::map;
struct map_data {
int data1;
int data2;
};
struct map_data_comparator
{
bool operator()(const map_data& one, const map_data& two) const
{
if (one.data1 == two.data1)
return one.data2 > two.data2;
else
return one.data1 < two.data1;
}
};
int main()
{
map<map_data, int, map_data_comparator> the_map;
}
你可以看到我也做了你的比较器参数 const references ,只是为了它真的。