C++ 我的向量已排序,但我';我得到一个“a”;“序列未排序”;错误

C++ 我的向量已排序,但我';我得到一个“a”;“序列未排序”;错误,c++,C++,是否存在std::sort失败的情况 我有一个std::vector队列,我用它执行以下操作 std::sort(queue.begin(), queue.end()); std::pair<iterator, iterator> match = std::equal_range(queue.begin(), queue.end(), cost); 比较功能是否会以某种方式出现故障?还有什么会导致此错误?正如@ecatmur第一次从心理上检测到的,您的问题是如果排序比较没有

是否存在
std::sort
失败的情况

我有一个
std::vector队列
,我用它执行以下操作

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

比较功能是否会以某种方式出现故障?还有什么会导致此错误?

正如@ecatmur第一次从心理上检测到的,您的问题是如果排序比较没有实现严格的弱排序,
队列的元素类型是什么?它有定制的比较器吗?请添加它。心理调试:
queue
std::vector
并包含NaN。@因此,
std::vector
其中
X
double
排序,
double
包含一个
NaN
您不想从
std::pair
公开继承。这不是为了那个。
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;};
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::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>{} );