嗨,我是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;
}
}
答案 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
我相信这就是您想要的-一个视图,用于对分离的内部向量的数据进行排序。