C++ std::vector 排序
时间: 2024-06-18 22:03:08 浏览: 99
C++中的std::vector是一种动态数组,可以在运行时动态地分配内存空间。排序可以使用STL中的sort()函数,需要包含头文件<algorithm>。sort()函数可以对vector中的元素进行排序,其默认是升序排序。
示例代码如下:
```
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> vec{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
sort(vec.begin(), vec.end()); // 默认是升序排序
for(auto i : vec)
{
cout << i << " ";
}
cout << endl;
return 0;
}
```
输出结果为:
```
1 1 2 3 3 4 5 5 5 6 9
```
相关问题
c++ std::vector 排序
C++中的std::vector是一个动态数组容器,可以存储任意类型的元素。要对std::vector进行排序,可以使用std::sort函数,该函数位于<algorithm>头文件中。
下面是对std::vector进行排序的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> nums = {5, 2, 8, 1, 9};
// 使用std::sort对std::vector进行排序
std::sort(nums.begin(), nums.end());
// 输出排序后的结果
for (int num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
上述代码中,我们首先包含了<iostream>、<vector>和<algorithm>头文件。然后创建了一个std::vector<int>类型的nums,并初始化了一些整数元素。
接下来,我们使用std::sort函数对nums进行排序,传入nums.begin()和nums.end()作为排序范围。
最后,我们使用for循环遍历排序后的nums,并输出每个元素。
运行上述代码,输出结果为:1 2 5 8 9,表示nums已经按升序排列。
已知class ControlArc { public: std::string taskId; std::string satelliteName; std::string satelliteId; std::chrono::system_clock::time startTime; std::chrono::system_clock::time endTime; long long dt};std::vector<std::vector> ControlArcList , ControlArcList.size=4, 任意一个std::vector 中的startTime且endTime时间段都有可能和其余3个std::vector中的startTime且endTime时间段有重叠,请给出c++代码使得任意一个std::vector 中的startTime且endTime时间段都不和其余3个std::vector中的startTime且endTime时间段有重叠,有重重叠的筛选规则是ControlArc 中dt值大的
以下是一种可能的实现方式:
```c++
#include <vector>
#include <algorithm>
bool overlap(const ControlArc& arc1, const ControlArc& arc2) {
return arc1.endTime > arc2.startTime && arc2.endTime > arc1.startTime;
}
bool compare(const ControlArc& arc1, const ControlArc& arc2) {
return arc1.dt > arc2.dt;
}
void filterControlArcList(std::vector<std::vector<ControlArc>>& ControlArcList) {
for (auto& arcList : ControlArcList) {
std::sort(arcList.begin(), arcList.end(), compare);
for (size_t i = 0; i < arcList.size(); ++i) {
bool overlapFlag = false;
for (auto& otherList : ControlArcList) {
if (&otherList == &arcList) continue;
for (auto& otherArc : otherList) {
if (overlap(arcList[i], otherArc)) {
overlapFlag = true;
break;
}
}
if (overlapFlag) break;
}
if (overlapFlag) {
arcList.erase(arcList.begin() + i);
--i;
}
}
}
}
```
首先定义了一个 `overlap` 函数,用于判断两个 `ControlArc` 对象的时间段是否有重叠。然后定义了一个 `compare` 函数,用于在排序时按照 `ControlArc` 对象的 `dt` 值从大到小排序。最后定义了一个 `filterControlArcList` 函数,用于过滤 `ControlArc` 对象列表。具体实现如下:
- 对于每个 `ControlArc` 对象列表,首先按照 `dt` 值从大到小排序,以确保在有重叠的情况下优先保留 `dt` 值大的对象;
- 然后遍历每个 `ControlArc` 对象,检查它是否与其他列表中的对象重叠;
- 如果有重叠,则从当前列表中删除该对象。
这样,最终每个 `std::vector` 中的 `ControlArc` 对象的时间段都不会与其他 `std::vector` 中的对象重叠,并且在有重叠的情况下会保留 `dt` 值大的对象。
阅读全文