相关疑难解决方法(0)

stl排序 - 严格的弱排序

为什么STL使用严格弱排序的比较函数?为什么不能进行部分订购?

c++ algorithm stl strict-weak-ordering

18
推荐指数
4
解决办法
7688
查看次数

通过非传递性比较器进行排序"工作"吗?

如果我提供一个非传递会发生什么ComparatorCollections.sort?我可以遇到无限循环吗?

我写的一个小测试产生了一个输出,但我想确保始终如此.

问题是在某些情况下,我的比较器可以产生循环,在这种情况下,我只是想确保它不会遇到无限循环.我不关心实际结果.

java sorting comparator

10
推荐指数
1
解决办法
2334
查看次数

是什么原因导致std :: sort()访问超出范围的地址

我知道要使用std :: sort(),比较函数必须是严格的弱顺序,否则它会因访问超出范围的地址而崩溃.(https://gcc.gnu.org/ml/gcc-bugs/2013-12/msg00333.html)

但是,当比较函数不是严格的弱顺序时,为什么std :: sort()访问越界地址?它试图比较什么?

我也想知道STL中是否还有其他陷阱需要注意.

c++ sorting stl strict-weak-ordering

6
推荐指数
1
解决办法
1536
查看次数

令人困惑的SegFault涉及STL排序算法

我正在尝试使用STL重新创建编程珍珠的第15列中的程序.我正在尝试使用字符串和索引向量创建后缀数组.我记录了我在一个名为input的字符串中读取的单词列表,该字符串充当由我在程序开头从stdin读取的''分隔的单词列表.一切都按预期工作,直到我到达代码的排序部分.我想使用STL的排序算法,但我对我似乎正在创建的seg错误感到非常困惑.

我有:

vector<unsigned int> words;
Run Code Online (Sandbox Code Playgroud)

和全局变量

string input;
Run Code Online (Sandbox Code Playgroud)

我定义了自定义比较函数:

bool wordncompare(unsigned int f, unsigned int s) {
  int n = 2;

  while (((f < input.size()) && (s < input.size()))
         && (input[f] == input[s])) {
    if ((input[f] == ' ') && (--n == 0)) {
      return false;
    }

    f++;
    s++;
  }

  return true;
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时:

sort(words.begin(), words.end());
Run Code Online (Sandbox Code Playgroud)

该计划顺利退出.

但是,当我运行代码时:

sort(words.begin(), words.end(), wordncompare);
Run Code Online (Sandbox Code Playgroud)

我在STL内部生成了一个SegFault.

GDB反向跟踪代码如下所示:

#0  0x00007ffff7b79893 in std::string::size() const () from /usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/libstdc++.so.6
#1  0x0000000000400f3f in wordncompare (f=90, s=0) at text_gen2.cpp:40
#2 …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm stl vector segmentation-fault

5
推荐指数
1
解决办法
2429
查看次数