字符串向量的next_permutation正在跳过一个排列

时间:2014-01-19 20:59:54

标签: c++

我正在尝试打印字符串向量的所有排列。此代码按预期工作:

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

using namespace std;

int main() {
    vector<string> v;

    v.push_back("+1");
    v.push_back("x4");

    do {
        cout << v[0] << " " << v[1] << endl;
    } while (next_permutation(v.begin(), v.end()));
}

输出:

+1 x4
x4 +1

但是当我为“* 4”改变“x4”时,next_pemutation循环只迭代一次。

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

using namespace std;

int main() {
    vector<string> v;

    v.push_back("+1");
    v.push_back("*4");

    do {
        cout << v[0] << " " << v[1] << endl;
    } while (next_permutation(v.begin(), v.end()));
}

输出:

+1 *4

像#这样的其他角色似乎也有同样的效果。为什么会这样?

1 个答案:

答案 0 :(得分:4)

您的算法需要从排序vector开始,以打印所有排列:

"+1" < "x4"'+' < 'x'):所以你真的从“第一”排列开始。
"+1" > "*4"'+' > '*'):所以你不要从第一个排列开始。

请参阅man ascii以获得订单或char

要解决您的问题,您可以在最后push_back之后执行:

std::sort(v.begin(), v.end());