排序字符向量并在C++中将大写和小写字母视为相等的最佳方法?

Oli*_*via 3 c++ sorting vector

我现在拥有的是:

std::vector<char> test = {'a', 'f', 'b', 'g', 'c', 'K', 'E'};

int smallest;
for ( int i = 0; i < test.size() - 1; i++)
{
    smallest = i;
    for (int j = i + 1; j < test.size(); j++ )
    {
        if (test[j] < test[smallest])
            smallest = j;
    }
    int temp = test[smallest];
    test[smallest] = test[i];
    test[i] = temp;
}
Run Code Online (Sandbox Code Playgroud)

将矢量测试排序为:{E,K,a,b,c,f,g}.但是,我想将大写和小写字母视为等号,因此最终结果为:{a,b,c,E,f,g,K}.实现这一目标的最佳方法是什么?我想一种方法是将大写或小写字母的所有值重置为彼此相等.

Dei*_*Dei 5

最好的方法是std::sort<algorithm>这样使用:

std::sort(v.begin(), v.end(), [](char i, char j){ return std::tolower(i) < std::tolower(j); });
Run Code Online (Sandbox Code Playgroud)

v矢量在哪里,std::tolower可以找到<cctype>.如果您无法访问C++ 11 lambdas,则可以轻松替换它.