Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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++ 哪种方法是对二维数组进行排序的最佳方法?_C++_Arrays_Sorting - Fatal编程技术网

C++ 哪种方法是对二维数组进行排序的最佳方法?

C++ 哪种方法是对二维数组进行排序的最佳方法?,c++,arrays,sorting,C++,Arrays,Sorting,二维数组排序的最快方法是什么? 我用C++语言创建一个应用程序,我有一个二维字符串数组来存储状态名和城市名称。我想对该数组进行排序,并将其快速显示为列表。所以,它必须更快 声明如下 std::string state[STATE_SIZE] std::string city[STATE_SIZE][CITY_SIZE] 结果应该是这样的 state[0] = "AAA"; state[1] = "BBB"; city[0][0] = "ABC"; city[0][1] = "PQR"; ci

二维数组排序的最快方法是什么? 我用C++语言创建一个应用程序,我有一个二维字符串数组来存储状态名和城市名称。我想对该数组进行排序,并将其快速显示为列表。所以,它必须更快

声明如下

std::string state[STATE_SIZE]
std::string city[STATE_SIZE][CITY_SIZE]
结果应该是这样的

state[0] = "AAA";
state[1] = "BBB";

city[0][0] = "ABC";
city[0][1] = "PQR";
city[0][2] = "XYZ";
city[1][0] = "ADC";
city[1][1] = "GSF";
city[1][2] = "UHA";
城市数组应按州然后按城市排序

我也读过这些帖子。但它只适用于一维数组

解决您的问题(特别是30000多条记录)的最佳方法是实现AVL树(一种自平衡二进制文件)。我建议你在维基百科或其他网站上读一些关于它们如何工作的文章(特别是AVL树)。为了让您了解如何实现,我进行了一次随机谷歌搜索:

以下内容可能会有所帮助:

intmain(intargc,char*argv[])
{
constexpr int STATE_SIZE=2;
城市内部的constexpr_SIZE=3;
std::字符串数据[州大小][城市大小]=
{
{“ABC”、“XYZ”、“PQR”},
{“UHA”、“ADC”、“GSF”}
};
字符串状态[状态大小]={“AAA”,“BBB”};
对于(int i=0;i!=状态_SIZE;++i){
标准::排序(数据[i],数据[i]+城市大小);
}
对于(int i=0;i!=状态_SIZE;++i){

std::您想按城市还是按州对其进行排序?您使用的是什么数据结构,它们是如何链接的。您能为您现有的结构添加一个代码示例吗?性能真的是一个问题吗?例如,它是您应用程序中的瓶颈吗?@MatthiasBonora
String data[州,市]
我想先按州再按城市排序。啊,我很抱歉。我在网站上找到了一个主题,它有一个很好的排序技巧,叫做
std::sort
(通过
algorithm.h
)。您可以使用二叉树对其进行排序,这取决于数据的大小。这可能是正确的选择。如果它非常小,那么实现一些可怕的算法就没有意义了,您可以通过比较第一行和第二行来“正常排序”。因此,您有类似于
std::string data[STATE_size/*2*/][CITY_SIZE/*3*/]={{“ABC”、“PQR”、“XYZ”}、{“ADC”、“GSF”、“UHA”};
?实际上,你想对每行进行排序吗?他提到他计划对30000多行进行排序,std::sort不会太慢吗?@Thebaconning:据我所知,OP只会排序一次。因此,它将是
O(n logn)
(作为AVL树,但更便于缓存)。
int main(int argc, char *argv[])
{
    constexpr int STATE_SIZE = 2;
    constexpr int CITY_SIZE = 3;

    std::string data[STATE_SIZE][CITY_SIZE] =
    {
        {"ABC", "XYZ", "PQR"},
        {"UHA", "ADC", "GSF"}
    };
    std::string states[STATE_SIZE] = {"AAA", "BBB"};

    for (int i = 0; i != STATE_SIZE; ++i) {
        std::sort(data[i], data[i] + CITY_SIZE);
    }

    for (int i = 0; i != STATE_SIZE; ++i) {
        std::cout << states[i] << std::endl;
        for (int j = 0; j != CITY_SIZE; ++j) {
            std::cout << "    " << data[i][j] << std::endl;
        }
    }

    return 0;
}