c++ - 如何将结构插入集合并打印集合的成员?
问题描述
我必须使用 struct mov
struct mov {
string src;
string dst;
};
其中 src 是源,dst 是目标。该程序的目的是分析棋盘上的棋子并生成所有可能的移动。可能的移动必须在一组中表示,但它必须是一组移动,所以设置。我发现一些方法说要实现比较器,但我不知道它是否有效,因为在打印集合时(使用迭代器)我会因为打印时的“<<”而出错,我猜它与比较器冲突,因为它使用“<”???
解决方案
<<
并且<
永远不会感到困惑。包装成员并使用按字典顺序实现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
按如下方式工作。演示在这里。
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;
}
推荐阅读
- excel - VBA 错误 1004 选择工作表范围失败
- python - 创建接收实时异步提要的 Python 数据可视化网站的方法
- c - 我可以将 NULL 传递给 modf/modff 吗?
- github - 使用 github 操作将特定文件扩展名推送到 azure 存储帐户
- sql - SQL 视图中的静态唯一标识符/列
- r - R:将两个数据框列合二为一
- amazon-web-services - 删除 EC2 实例后,AWS 警报始终处于“警报状态”
- shell - 如何从xshell中的光标位置删除单词后缀
- docker - 连接多个 docker 容器(docker-compose) - front -> api -> solr
- flutter - 如何从 Flutter Web 中的 google url 获取数据