我必须使用struct mov
struct mov {
string src;
string dst;
};
其中src是源,而dst是目标。该程序的目的是分析棋盘上的棋子并生成所有可能的动作。可能的移动必须在一组中表示,但必须是一组移动,因此已设置。我发现一些方法可以实现比较器,但是我不知道它是否有效,因为在打印集(使用迭代器)时,由于打印时出现“ <<”,我会出错,我猜它与比较器冲突,因为它使用“ <” ???
答案 0 :(得分:1)
<<
和<
永远不会混淆。打包mov
成员并利用std::tuple
将operator<
实现为字典顺序的事实,您可以轻松编写mov
的比较器,如下所示:
struct mov
{
std::string src;
std::string dst;
bool operator<(const mov& rhs) const {
return std::tie(src, dst) < std::tie(rhs.src, rhs.dst);
}
};
然后,此方法可与std::set
配合使用,如下所示。 DEMO is here.
int main()
{
std::set<mov> moves{ {"src1","dts1"}, {"src2","dts2"}, {"src3","dts3"} };
// iterator
std::cout << "Using iterator," << std::endl;
for(auto it = moves.begin(); it != moves.cend(); ++it){
std::cout << it->src << "," << it->dst << std::endl;
}
std::cout << std::endl;
// range-based-for
std::cout << "Using range-based-for," << std::endl;
for(const auto& mov_i : moves){
std::cout << mov_i.src << "," << mov_i.dst << std::endl;
}
return 0;
}