#include <iostream>
#include <vector>
#include <algorithm>
int main() {
// 定义三维vector并初始化
std::vector<std::vector<std::vector<double>>> data = {
{{1.0, 5.2, 3.1}, {7.3, 8.2, 2.1}},
{{9.1, 6.3, 4.4}, {5.5, 3.6, 0.7}},
{{2.3, 4.1, 5.9}, {7.8, 1.2, 6.4}}
};
// 定义一个结构体来保存值和位置
struct ValueWithPosition {
double value;
size_t x, y, z;
};
// 定义一个vector来保存所有元素及其位置
std::vector<ValueWithPosition> allElements;
// 遍历三维vector并保存元素及其位置
for (size_t i = 0; i < data.size(); ++i) {
for (size_t j = 0; j < data[i].size(); ++j) {
for (size_t k = 0; k < data[i][j].size(); ++k) {
allElements.push_back({data[i][j][k], i, j, k});
}
}
}
// 对allElements排序
std::sort(allElements.begin(), allElements.end(), [](const ValueWithPosition &a, const ValueWithPosition &b) {
return a.value < b.value;
});
// 输出最小的10个值及其位置
std::cout << "最小的10个值及其位置:" << std::endl;
for (size_t i = 0; i < std::min(size_t(10), allElements.size()); ++i) {
const auto &elem = allElements[i];
std::cout << "值: " << elem.value << ", 位置: (" << elem.x << ", " << elem.y << ", " << elem.z << ")" << std::endl;
}
return 0;
}
说明:
-
定义数据结构:使用三维向量
data
来存储三维数据,并定义了一个结构体ValueWithPosition
来保存值及其位置。 -
收集所有元素及其位置:遍历三维向量,将每个元素及其在三维向量中的位置保存到一个一维向量
allElements
中。 -
排序:使用
std::sort
对allElements
进行排序。排序的比较函数是一个lambda表达式,按照元素值进行升序排序。 -
输出结果:遍历排序后的结果,输出最小的10个值及其位置。