我的向量已排序,但我收到“序列未排序”错误

2024-01-30

是否存在以下情况:std::sort fails?

我有一个std::vector<KeyValPair<T>> queue我用它来做以下事情

std::sort(queue.begin(), queue.end());
std::pair<iterator, iterator> match =
    std::equal_range(queue.begin(), queue.end(), cost);

正是如此。有时,并非总是如此,我会收到“序列未排序”错误。

文档描述了sort http://www.cplusplus.com/reference/algorithm/sort/ and equal_range http://www.cplusplus.com/reference/algorithm/equal_range/由于使用相同的比较函数,所以我很困惑向量如何变得无序。

The vectortype 是带有自定义比较运算符的以下类。

template<typename T>
class KeyValPair: public std::pair<double, T>
{
public:
    KeyValPair(double d, T t): std::pair<double, T>(d, t){};

    bool operator<(const KeyValPair<T>& rhs) const 
    { 
        return first < rhs.first;
    }

    bool operator==(const KeyValPair<T>& rhs) const 
    { 
        return second == rhs.second;
    }
};

template<typename T>
bool operator< (const KeyValPair<T>& lhs, const double& rhs) {return lhs.first < rhs;};
template<typename T>
bool operator< (const double& lhs, const KeyValPair<T>& rhs) {return lhs < rhs.first;};

比较功能是否会以某种方式失败?还有什么可能导致此错误?


正如@ecatmur 首先在心理上检测到的那样,你的问题是你正在使用< on doubles,以及您的一个或多个doubles is a NaN.

A safe double订购如下:

struct safe_double_order {
  bool operator()(double lhs, double rhs) const {
    if ((lhs != lhs) || (rhs != rhs)) // NaN detector
      return (lhs!=lhs)>(rhs!=rhs); // order NaN less than everything, including -infinity
    return lhs < rhs;
  }
};

接下来,我们可以编写一个键排序器:

template<class K, class O=std::less<K>>
struct key_sorter {
  struct helper {
    K const& k;
    helper( K const& o ):k(o) {}
    template<typename V>
    helper( std::pair<K, V> const& o ):k(o.first) {}
    bool operator<( helper const& o ) const {
      return O{}( k, k.o );
    }
  };
  bool operator()( helper lhs, helper rhs ) const {
    return lhs < rhs;
  }
};

它传递了一个键类型和一个可选的排序函子,让您可以搜索/排序std::pair<Key,?> with Key直接输入。

std::vector< std::pair<double, X> > vec;
std::sort( vec.begin(), vec.end(), key_sorter<double, safe_double_order>{} );
auto match = std::equal_range( vec.begin(), vec.end(), value, key_sorter<double, safe_double_order>{} );

上面有一些 C++11ism,但是如果您使用 C++03,总体设计应该很清楚。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的向量已排序,但我收到“序列未排序”错误 的相关文章

  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • 改变架构生成器中的列长度?

    我有两个字段需要增加字符限制 我通读了文档 令我惊讶的是我没有找到它的选项 可以做吗 如果不是 我应该如何解决这个问题 我可以删除该列并使用正确的属性重新创建它 但我不想丢失数据库中的任何数据 对于 Laravel 4 DB update
  • mysql、准备好的语句和自动类型转换

    我使用常规语句和准备好的语句执行完全相同的查询时得到不同的结果 我认为这是一个类型转换错误 mysql gt show columns from server where field vlan Field Type Null Key Def
  • 在 Android 中缓存文件的最佳实践

    我目前的应用程序将图像文件缓存在cache应用程序的子目录 这些图像用于ListView并存储在HashMap of SoftReferences to Bitmaps 所以我的问题是 缓存这些图像文件的最佳方法是什么 而不增加我的应用程序
  • 协助刷新 athena 表中的数据

    我编写了从 S3 上的多个外部表读取数据的查询 应用必要的过滤器 连接 然后将结果加载到目标表中以在 Athena 中进行分析 但是 随着源表中的数据刷新 我想刷新目标表 所以我打算删除并重新创建该表 但它似乎不起作用 我能够删除目标表 但
  • 为什么 ondrop 不起作用?

    我试图让拖放工作 但我将一个函数连接到 ondrop 事件 但该函数从未被调用 这是一个笨蛋 http plnkr co edit qGEdYO8okRZAR3bnZrNk p preview http plnkr co edit qGEd
  • MPMediaItems 原始歌曲数据

    我想知道如何访问 MPMediaItem 的原始数据 有任何想法吗 您可以通过以下方式获取媒体项的数据 void mediaItemToData Implement in your project the media item picker
  • 其他语言中的 Cobol 88 类型等效项是什么?

    我现在正在学习 COBOL 非常喜欢 88 类型的变量 我想知道其他语言中是否有类似的东西 也是最知名的语言 例如 C Objective C 甚至使用库 我唯一能想到的相似之处就是使用 define booleanResult varia
  • 颠倒方向在 iOS 6 中不适用于导航视图和选项卡栏视图?

    我在 ios 6 中创建了一个带有导航视图的应用程序 此外 我还在应用程序摘要中设置了所有方向选项 甚至使用了 BOOL shouldAutoRotate and NSUInteger supportedInterfaceOrientaio
  • 如何在 Java Swing 中同步两个视图

    我正在尝试这样做 在我的 GUI 中 我有一个带有自定义模型的 JTable 在 GUI 的其他部分 我有一个面板 可以在其中绘制一些箭头 我想 同步这两个视图 假设我的 JTable 中有 5 行 我将在箭头面板中绘制 5 个箭头 如果我
  • 使用 ExtJS4 从文本字段切换到显示字段

    我创建了一个在普通显示字段中显示值的表单 表单旁边有一个 编辑 按钮 一旦用户单击 显示字段应切换为文本字段 因此使数据可编辑 我猜测 这可以通过使用两种相同的表单来实现 一种可编辑 一种不可编辑 并且根据用户单击按钮的情况 其中一种或另一
  • 未知标签类型:“连续”

    我的团队伙伴 有问题 Avg SessionLength TimeonApp TimeonWebsite LengthofMembership Yearly Amount Spent 0 34 497268 12 655651 39 577
  • IE 中 jquery Accordion 的无效参数错误

    jquery 手风琴抛出 无效参数 IE 中的例外 我的是 IE8 它适用于 Firefox 和 Chrome jquery Accordion 与 IE 可能存在什么问题 这是 HTML div h3 a href Training a
  • IE9 导入内联 SVG 元素损坏

    我在用这个方法 https stackoverflow com a 9883539 494954将 SVG 文档导入到页面中 效果很好 但在 IE9 中 没有一个
  • 如何用CSS使3个元素相互重叠

    我有3个要素 div class foo div div class bar div div class foobar div I want foo重叠 bar bar重叠 foobar foobar重叠 foo 像这样 用CSS可以吗 没
  • 如何选择本示例中未使用的代码

    我有一个int我的表中的列SQL数据库 我在这张表中保留了一些代码 我的代码的示例范围是 1 9 我不需要在这个范围内使用代码 Example 使用的代码是 Select code from MyTable result is 2 6 7
  • asp.net c# 中的 System.Web.Caching.Cache.NoSlidingExpiration

    请告诉我有关System Web Caching Cache NoSlidingExpiration在 ASP NET 中 有资料了here http msdn microsoft com en us library ms178597 as
  • Django 1.9 弃用警告 app_label

    我刚刚更新到 Django v1 8 并在更新项目之前测试了本地设置 并且收到了以前从未见过的弃用警告 这对我来说也没有任何意义 我可能只是忽略了某些内容或误解了文档 Users neilhickman Sites guild ankylo
  • 使用 blockproc 或 im2col 在图像上重叠滑动窗口?

    我必须申请dct2到我的图像的小窗口 最好使用重叠窗口 我发现Matlab中有两个函数可以实现这一点blockproc and im2col 我也无法理解 希望得到一些澄清 blockproc可用于使用以下方法在滑动窗口上实现我的功能Bor
  • DateTimeFormatter 工作日似乎少了一位

    我正在将现有应用程序从 Joda Time 移植到 Java 8java time 我遇到了一个问题 解析包含 星期几 值的日期 时间字符串在单元测试中触发了异常 解析时 2016 12 21 20 50 25 十二月星期三 0000 3
  • 我的向量已排序,但我收到“序列未排序”错误

    是否存在以下情况 std sort fails 我有一个std vector