【发布时间】:2016-09-17 00:28:57
【问题描述】:
我想对二维向量 (10x100) 中的数字进行排序。
我的想法是先按行排序,然后在第一列中找到最小的数字并保存在一个新的一维向量中,然后删除列中最小的一个,以此类推直到最后一个数字。
我的代码是这样的,但它不起作用。
vector <vector <int> > vec(10, vector <int> (0));// already sorted by rows.
vector <int> datafinal;
for( int row=0; row < vec.size(); row++){
int mini = vec[0][0];
if (vec[row][0]< mini) {
datafinal.push_back(mini);
vec[row].erase(vec[row].begin());
}
}
for (int k=0; k< datafinal.size(); k++){
cout << datafinal[k] << endl;
}
【问题讨论】:
-
您的逻辑似乎从根本上被打破了。由于同一行可能每次都具有最小值,因此最终该行将完全为空,而其余行保持不变。第一列将不再有“最小的”,因为根据定义,其中一行将为空,并且您的逻辑将导致未定义的行为。显示的代码也有一个明显的错误,但由于您的整体逻辑似乎很糟糕,这是一个有争议的问题。先弄清楚正确的逻辑,然后开始着手实现。
-
你能告诉我一些逻辑吗?我只是一个初学者。
-
不幸的是,只有您知道对矩阵进行排序所需的逻辑。我不知道您的矩阵是做什么用的,以及您打算如何使用它。尽管您可能是 C++ 的初学者,但这与 C++ 无关。如果在 C++、Java、Python、Perl 或任何其他语言中实现,逻辑将是相同的。首先,您需要用逻辑术语定义您需要如何对矩阵进行排序。然后才把它翻译成代码。
-
你不需要对一行进行排序来获得一行中最小的项目。只需使用
std::min_element(vec[row].begin(), vec[row].end());即可获得一个迭代器,指向一行中最小的项目row。