具有不满足严格弱排序的值的 c++ 排序范围

标签 c++ algorithm

我需要对一个范围内的值进行排序,以便该范围代表一个

struct Link
{
   int id;
   int next;
};

Link::idLink::next 的值是任意的,它们本身不提供任何语义意义(对排序算法没有任何意义) ).

两个链接(排序后)的关系是:lhs.next正好是rhs.id

先决条件

  • 无序的 range 保证保存的值可以恰好排序到一个 chain 中。
  • 保证值集合中没有递归(没有循环)

示例:

std::vector< Link> range{ { 4, 1}, { 1, 5}, { 3, 4}, { 2, 3}};
auto chain = some_algorithm( range);
// expect the ordering to be: { { 2, 3}, { 3, 4}, { 4, 1}, { 1, 5}};

我至少可以想到两种方法,但我怀疑这已经以惯用的方式解决了。所以,我的问题是:如何以惯用的方式解决这个问题?

最佳答案

我怀疑是否存在惯用的方法,因为这不是常见的情况。

链接主要由指针/迭代器(例如 std::list)完成,实际链接主要在插入时完成。

有趣的是找到第一个链接以及如何处理循环链和错误情况。

关于具有不满足严格弱排序的值的 c++ 排序范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52401343/

相关文章:

c++ - 是否可以使用 testing::NiceMock<> 等价物来包装/配置模拟引用?

c++ - 派生模板类

c - 如何解决这个匹配算法?

java - 在Java中查找集合的所有分区

c++ - C++服务器-共享内存中的客户端boost::interprocess数组访问

C++ ifstream 失败位和坏位

c++ - 什么会导致连接卡在 close_wait 状态

arrays - 从二维字符数组打印所有可能的单词

java - 将 ArrayList<String> 数据转换/传输到 String[] 时出现不兼容类型错误

performance - 如何实现 super 优化器