map_data
定義の後のセミコロンを忘れました。それを修正すると、C++11 でのコンパイルが成功します。
#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
なぜ伝統的ではないのですか?
#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 参照にしたこともわかります。