Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can";排序“;函数内部的<;算法>;是否用于对二维字符数组进行排序?_C++_Algorithm_Sorting_Matrix_Char - Fatal编程技术网

C++ Can";排序“;函数内部的<;算法>;是否用于对二维字符数组进行排序?

C++ Can";排序“;函数内部的<;算法>;是否用于对二维字符数组进行排序?,c++,algorithm,sorting,matrix,char,C++,Algorithm,Sorting,Matrix,Char,代码获取由空格分隔的多个单词,然后将n个单词放在“c”字符矩阵的n-1行上。程序接下来应该做的是按字母顺序对这些单词进行排序 如何使用“排序”功能来完成此操作?如果没有,还有其他方法吗?没有,您不能std::sortchar[][]s,因为数组是不可分配的。您可以对char*[]s进行排序,因为指针是 但是我建议您使用std::vector并对其进行排序,或者使用std::set对其元素执行字母顺序,而不是char[][] char s[251],c[13][21],*p; int n; f.g

代码获取由空格分隔的多个单词,然后将n个单词放在“c”字符矩阵的n-1行上。程序接下来应该做的是按字母顺序对这些单词进行排序


如何使用“排序”功能来完成此操作?如果没有,还有其他方法吗?

没有,您不能
std::sort
char[][]
s,因为数组是不可分配的。您可以对
char*[]
s进行排序,因为指针是

但是我建议您使用
std::vector
并对其进行排序,或者使用
std::set
对其元素执行字母顺序,而不是
char[][]

char s[251],c[13][21],*p;
int n;
f.get(s,251);
p=strtok(s," ");
n=0;
while(p)
{
    strcpy(c[n],p);
    ++n;
    p=strtok(NULL," ");
}
std::字符串行;
f、 getline(line);
std::stringstream ss(线路);
std::向量词(std::istream_迭代器(ss),{});
std::sort(std::begin(单词),std::end(单词));

否。
std::sort
不能用于对2D数组进行排序,因为2D数组的元素是数组,数组不可交换,这是
std::sort
所要求的

您可以使用所示的
std::array
,这对于像您这样的小数组可能很好。但请务必认识到,交换数组具有线性复杂性,因此对大型数组的数组元素进行排序可能会非常慢

如果希望对数组进行排序,最好使用间接寻址。使用对阵列的引用而不是子阵列。我指的是一般意义上的参考;不能有
T&
引用的数组。可以保持2D数组不变,但对指向该2D数组的指针数组进行排序:

std::string line;
f.getline(line);
std::stringstream ss(line);
std::vector<std::string> words(std::istream_iterator<std::string>(ss), {});
std::sort(std::begin(words), std::end(words));

这甚至可以在没有自定义比较对象的情况下进行排序。请注意,数组中的字符串是空的,因此必须首先通过插入字符等方式增加字符串。对于元素在整个阵列生命周期内都存在的阵列,它不是一个临时替代品。

如前所述,不可以。但是,您可以使用
std::array
,其中
std::sort
将对内部数组进行词典比较

std::array<std::string, 13> c;
std::数组c; //... 排序(c.begin(),c.end()); 用于(常数自动和v:c)
难道这个答案完全正确吗。但是可能需要指出的是,排序
std::array
元素可能会非常慢。
std::array
的自然比较将包括存储在char数组样式字符串末尾之后的任何垃圾。这可能是一个问题。要解决@Galik:Value initialise
c
指出的问题,使垃圾只是空终止符。
strcpy
将在感兴趣的字符后放置一个
\0
,因此在词典比较中,其他字符是什么并不重要,是吗?@TEDLYNMO词典比较不会在
'\0'
处停止。另一个修复方法是使用
std::strcmp
,如我在指针建议中所示。
std::array<std::string, 13> c;
std::array<std::array<char, 21>, 13> c;
//...
std::sort(c.begin(), c.end());

for(const auto& v : c)
    std::cout << v.data() << "\n";