如何在不使用插入排序更改原始向量的情况下对2d向量进行排序

时间:2019-09-14 23:07:12

标签: c++ pointers vector

嗨,我是C ++和指针的新手,所以我只想问一下 如何插入排序二维字符串向量x而不直接对其排序

最后看起来应该像
vector[vector[sorted],vector[sorted]........]

要求:(请勿直接对字符串进行排序,因为这将导致过多的数据移动。为有效起见,请对指向字符串的指针进行排序。 ),我唯一可以使用的库是iostream,vector和字符串

所以我必须创建一个指向2d向量的2d向量指针,然后对指针pos进行排序 所以我尝试创建一个

vector<vector<string>> *p   

指向2d向量,但是我找不到除(*p)[i][j]之外的其他方式来访问向量 但是(*p)[i][j]将编辑原始向量。

我没有使用指针就实现了

shiftstring来自读取文件中的每一行,然后对每一行进行循环移位,

vector<vector<string > > shiftstring;
for (int y = 0; y < shiftstring.size(); y++) 
{
    for (int i = 1; i < shiftstring[y].size(); i++) 
    {
        string key = shiftstring[y][i];
        int j = i - 1;
        while (j >= 0 && shiftstring[y][j] > key) {
            shiftstring[y][j + 1] = shiftstring[y][j];
            j = j - 1;
        }
        shiftstring[y][j + 1] = key;
    }
}

1 个答案:

答案 0 :(得分:1)

似乎您只是放错了指针-您不需要指向2D矢量的指针。您想要指向您的字符串的指针的2D向量,即:std::vector<std::vector<const std::string*>>。我提出以下解决方案:

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

int main() {

    // the original vector
    std::vector<std::vector<std::string>> vec {
            {"text", "some"},
            {"multiple", "in", "vectors"},
            {"to"},
            {"sorted", "be"}
    };

    // the view - vector of vectors of pointers to the strings
    std::vector<std::vector<const std::string*>> sorted_view{};

    // for each vector of strings inside the vector of vectors...
    for (const auto& v : vec) {
        // ...we create a vector of views...
        sorted_view.emplace_back();
        // ...and push_back a pointer to that string into our view-vector
        for (const auto& str : v) {
            sorted_view.back().push_back(&str);
        }
    }

    // for every view-vector...
    for (auto& view : sorted_view) {
        // ...sort the pointers of that vector according to what they point to
        std::sort(view.begin(), view.end(), [](const auto& lhs, const auto& rhs) {
            return *lhs < *rhs;
        });
    }

    // print the view-vector
    for (const auto& v : sorted_view) {
        for (const auto ptr : v) {
            std::cout << *ptr << ' ';
        }
        std::cout << '\n';
    }
}

请注意,我正在使用std::sort中的<algorithm>。在那里,您应该实现插入排序,而不是调用标准算法。由于这是一项任务,因此我不会为您提供该部分。请记住,您正在对指针进行排序,但是将它们与指向的对象进行比较。

上面显示的输入的代码产生以下输出:

some text
in multiple vectors
to
be sorted

我相信这就是您想要的-一个视图,用于对分离的内部向量的数据进行排序。