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

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(使用前将#替换为@)

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

  • 检查空参数的最佳方法(保护子句)

    例如 您通常不希望构造函数中的参数为空 因此看到类似的内容是很正常的 if someArg null throw new ArgumentNullException nameof someArg if otherArg null throw
  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • 以相反的顺序迭代可变参数模板参数

    如果我手动反转传递给它的模板参数的顺序 以下代码将起作用 template
  • 扫描文本文件时如何跳过行?

    我想扫描一个文件并在阅读之前跳过一行文本 我试过 fscanf pointer n struct test i j 但这个语法只是从第一行开始 我可以使用 scanf 使用以下指令跳过行 fscanf config file n n 格式字
  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • 通过单个 GPIO 引脚转储闪存

    我正在使用 Infineon 的 XMC4500 Relax Kit 并尝试通过单个 GPIO 引脚提取固件 我非常天真的想法是通过 GPIO 引脚一次转储一位 然后用逻辑分析仪以某种方式 嗅探 数据 伪代码 while word by w
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • 导出到 CSV 时 Gridview 出现空行

    这个问题是由进一步讨论引发的这个问题 https stackoverflow com questions 6674555 export gridview data into csv file 6674589 noredirect 1 com
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 在何处将 CFLAG(例如 -std=gnu99)添加到 (Eclipse CDT) 自动工具项目中

    我有一个简单的 Autotools C 项目 不是 C 其框架是由 Eclipse CDT Juno 为我创建的 CFLAG 通过检查 似乎是 g O2 我希望所有生成的 make 文件也具有 std gnu99附加到 CFLAG 因为我使
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源

随机推荐

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

    我有两个字段需要增加字符限制 我通读了文档 令我惊讶的是我没有找到它的选项 可以做吗 如果不是 我应该如何解决这个问题 我可以删除该列并使用正确的属性重新创建它 但我不想丢失数据库中的任何数据 对于 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