标签: lexicographic

std :: next_permutation实现说明

我很好奇如何std:next_permutation实现,所以我提取了gnu libstdc++ 4.7版本并清理了标识符和格式以生成以下演示...

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

template<typename It>
bool next_permutation(It begin, It end)
{
        if (begin == end)
                return false;

        It i = begin;
        ++i;
        if (i == end)
                return false;

        i = end;
        --i;

        while (true)
        {
                It j = i;
                --i;

                if (*i < *j)
                {
                        It k = end;

                        while (!(*i < *--k))
                                /* pass */;

                        iter_swap(i, k);
                        reverse(j, end);
                        return true;
                }

                if (i == begin) …
Run Code Online (Sandbox Code Playgroud)

c++ permutation lexicographic stl-algorithm c++11

100
推荐指数
4
解决办法
3万
查看次数

74
推荐指数
6
解决办法
16万
查看次数

模板中的模板:为什么"`>>"应该是嵌套模板参数列表中的">>"

我知道当我们在另一个模板中使用模板时,我们应该这样写:

vector<pair<int,int> > s;

如果我们在没有空格的情况下写它:

vector<pair<int,int>> s;

我们会收到一个错误:

嵌套模板参数列表中的`>>'应该是`>>'

我觉得这是可以理解的,但我不禁想知道,在哪种情况下,这真的很模糊?

c++ compiler-construction templates vector lexicographic

50
推荐指数
5
解决办法
3万
查看次数

排序字符串列表忽略大写/小写

我有一个列表,其中包含代表动物名称的字符串.我需要对列表进行排序.如果我使用sorted(list),它将首先使用大写字符串给出列表输出,然后是小写.

但我需要以下输出.

输入:

var = ['ant','bat','cat','Bat','Lion','Goat','Cat','Ant']
Run Code Online (Sandbox Code Playgroud)

输出:

['ant', 'Ant', 'bat', 'Bat', 'cat', 'Cat', 'Goat', 'Lion']
Run Code Online (Sandbox Code Playgroud)

python sorting lexicographic lexicographic-ordering

22
推荐指数
3
解决办法
2万
查看次数

按字典顺序排序C++的整数数组

我想按字典顺序对大量整数(比如说1个元素)进行排序.

例:

input [] = { 100, 21 , 22 , 99 , 1  , 927 }
sorted[] = { 1  , 100, 21 , 22 , 927, 99  }
Run Code Online (Sandbox Code Playgroud)

我用最简单的方法完成了它:

  • 将所有数字转换为字符串(非常昂贵,因为它将占用大量内存)
  • 使用std:sortstrcmp作为比较功能
  • 将字符串转换回整数

有没有比这更好的方法?

c++ arrays sorting lexicographic

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

operator <比较多个字段

我有以下运算符<应该首先按值排序,然后按另一个值排序:

    inline bool operator < (const obj& a, const obj& b) 
    {
        if(a.field1< b.field1)
            return true;
        else
            return a.field2 < b.field2;
    }
Run Code Online (Sandbox Code Playgroud)

我觉得这是不正确的,如果没有对成员变量进行另一次第三次比较测试,你就不能这样做,但我找不到任何不起作用的例子.那么这真的和预期的一样吗?谢谢

编辑:我会把它编码为:

    inline bool operator < (const obj& a, const obj& b) 
    {
        if(a.field1< b.field1)
            return true;
                    else if(a.field1> b.field1)
            return false;
        else
            return a.field2 < b.field2;
    }
Run Code Online (Sandbox Code Playgroud)

有什么不同吗?我问,因为我知道我的经验是正确的,但也比第一个更长

c++ lexicographic comparison-operators

17
推荐指数
2
解决办法
7707
查看次数

什么是字典顺序?

字典顺序的确切含义是什么?它与字母顺序有何不同?

sorting string lexicographic

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

为类的元素定义字典比较的最简单方法是什么?

如果我有一个我希望能够排序的类(即支持一个小于概念),并且它有几个数据项,我需要做词典排序,那么我需要这样的东西:

struct MyData {
  string surname;
  string forename;

  bool operator<(const MyData& other) const {
    return surname < other.surname || (surname==other.surname && forename < other.forename); }
};
Run Code Online (Sandbox Code Playgroud)

对于拥有2个以上数据成员的任何内容,这变得非常难以管理.有没有更简单的方法来实现它?数据成员可以是任何Comparable类.

c++ lexicographic

12
推荐指数
3
解决办法
4813
查看次数

如何通过反转子串来找到按字典顺序排列的最小字符串?

我有一个Sa's和b's 组成的字符串.执行以下操作一次.目的是获得按字典顺序排列的最小字符串.

操作: 正好反转一个子串S

例如

  1. 如果S = abab那么Output = aabb(ba字符串反向S)
  2. 如果S = abba那么Output = aabb(bba字符串反向S)

我的方法

情况1:如果输入字符串的所有字符都相同,则输出将是字符串本身.

案例2:如果S是形式,aaaaaaa....bbbbbb....那么答案S就是它自己.

否则:查找第一次出现bS说的位置是我.字符串S看起来像

aa...bbb...aaaa...bbbb....aaaa....bbbb....aaaaa...
     |
     i   
Run Code Online (Sandbox Code Playgroud)

为了获得按字典顺序排列的最小字符串,将被反转的子字符串从索引i开始.请参阅下面的可能结束j.

aa...bbb...aaaa...bbbb....aaaa....bbbb....aaaaa...
     |           |               |               |
     i           j               j               j
Run Code Online (Sandbox Code Playgroud)

S[i:j]为每个j 反转子字符串并找到最小的字符串.该算法的复杂性将是O(|S|*|S|)其中|S|的字符串的长度.

有没有更好的方法来解决这个问题?可能是O(|S|)解决方案. …

string algorithm lexicographic

12
推荐指数
1
解决办法
1406
查看次数

Java中的词典顺序

如何在Java中定义词典顺序,特别是在引用特殊字符时!,.等等?

可以在此处找到示例订单

但Java如何定义它的顺序呢?我问,因为我在Java和Oracle上对字符串进行排序并得出不同的结果,并且找不到字典顺序的规范.

java lexicographic

11
推荐指数
2
解决办法
7万
查看次数