如果使用STL存在字符串向量std::vector<string> v
,我们可以这样排序:
std::sort(v.begin(), v.end());
我想使用选择排序来做这个,这是我的伪代码:
//for(i=0 to n-1){
//int min = i;
//for (j = i+1 to n){
//if (array[j]<array[min]){
//min = j;
//}
//if (min != i){
//swap array[min] and array[i];
//}
//}
//}
我使用迭代器的以下实现没有正确排序:
void sortDictionaryInsertionSort(){
//for(i=0 to n-1)
for (vector<string>::iterator oit = v.begin(); oit != v.end() - 1; oit++){
//int min = i;
vector<string>::iterator min = oit;
//for j = i+1 to n
for (vector<string>::iterator iit = v.begin() + 1; iit != v.end(); iit++){
//if array[j]<array[min]
if (iit->compare(*min) < 0){
//min = j;
min = iit;
}
}
//if (min != i){
if (min != oit){
//swap array[min] and array[i]
std::iter_swap(min, oit);
}
}
}
所以如果向量包含:
fezzy
dizzy
abuzz
排序后,它应该如下所示:
abuzz
dizzy
fezzy
答案 0 :(得分:2)
您应该初始化/var/www/my_url
以仅在itt
之后的未排序范围内进行迭代,而不是从头开始的整个向量(这将再次混合已排序的元素):
oit
您应该在功能开头检查vector<string>::iterator iit = oit + 1;
。在空容器上执行if(v.empty()) return;
是未定义的行为。