我有一组vector<pair<int,int>> 其中前面的是索引,后面的是数值,数值分布在1-21,我想将其分为4类,每一类的最小数值和最大数值不超过2
时间: 2024-04-12 19:31:48 浏览: 179
一维数组的四种排序
您可以使用以下代码将 vector<pair<int,int>> 分为 4 类,使得每一类的最小数值和最大数值不超过 2:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
// 自定义比较函数,按数值排序
bool compare(const std::pair<int, int>& a, const std::pair<int, int>& b) {
return a.second < b.second;
}
int main() {
std::vector<std::pair<int, int>> data = { {0, 1}, {1, 10}, {2, 5}, {3, 3}, {4, 21}, {5, 2}, {6, 8} };
// 按数值排序
std::sort(data.begin(), data.end(), compare);
// 分类
std::vector<std::vector<std::pair<int, int>>> categories(4);
for (const auto& pair : data) {
bool placed = false;
for (auto& category : categories) {
if (category.empty() || (category.back().second + pair.second <= 2)) {
category.push_back(pair);
placed = true;
break;
}
}
if (!placed) {
std::cout << "无法将数据放入任何类别中!数值超过限制。" << std::endl;
return 0;
}
}
// 打印结果
for (int i = 0; i < categories.size(); ++i) {
std::cout << "Category " << i + 1 << ":" << std::endl;
for (const auto& pair : categories[i]) {
std::cout << "Index: " << pair.first << ", Value: " << pair.second << std::endl;
}
}
return 0;
}
```
您可以将您的 vector<pair<int,int>> 数据存储在 `data` 变量中,然后运行上述代码即可得到分类结果。每个类别中的数据按照数值从小到大排序。
注意:上述代码假设存在至少 4 个类别能够满足要求,如果数据无法放入任何类别中,则会输出提示信息。
阅读全文