c++怎么在vector里添加自定义结构体,自定义结构体包含一个类对象和一个整形
时间: 2023-06-23 21:09:01 浏览: 64
可以使用类似于以下代码的方式向 `vector` 中添加自定义结构体:
```cpp
#include <vector>
// 自定义结构体
struct MyStruct {
MyClass myClassObj;
int myInt;
};
int main() {
std::vector<MyStruct> myVector;
// 创建一个 MyStruct 对象并添加到 vector 中
MyStruct myStructObj;
myStructObj.myClassObj = MyClass(); // 初始化 myClassObj
myStructObj.myInt = 123;
myVector.push_back(myStructObj);
// 或者直接在 push_back 中初始化 MyStruct 对象
myVector.push_back({MyClass(), 456});
return 0;
}
```
其中 `MyClass` 是自定义类,你需要根据实际情况填写。
相关问题
c++ 定义一个结构体 成员变量为动态分配的不定长vector
可以使用C++标准库中的vector来实现结构体成员变量为动态分配的不定长vector,示例代码如下:
```c++
#include <vector>
struct MyStruct {
std::vector<int> arr; // 成员变量为vector
MyStruct(int s) { // 构造函数中初始化vector大小
arr.resize(s);
}
};
```
在使用时,先创建结构体对象,并指定vector大小,然后就可以通过下标访问vector元素了,示例代码如下:
```c++
int main() {
MyStruct ms(10); // 创建结构体对象,并指定vector大小为10
for (int i = 0; i < ms.arr.size(); i++) {
ms.arr[i] = i; // 访问vector元素
}
return 0;
}
```
由于vector在析构时会自动释放内存,因此不需要手动调用析构函数。
c++ map 自定义结构体值排序
在C++中,使用STL库中的map容器可以方便地实现键值对的映射。但是,当要按照自定义结构体的某个属性进行排序时,需要使用自定义排序函数。
假设我们有以下结构体:
```
struct Student {
string name;
int age;
};
```
我们使用map存储学生信息,其中键为学生姓名,值为学生结构体类型。如果要按照学生年龄从小到大排序,可以通过定义一个自定义排序函数来实现,如下:
```
bool cmp(const pair<string, Student>& p1, const pair<string, Student>& p2) {
return p1.second.age < p2.second.age;
}
```
其中,pair<string, Student>表示map中的一个键值对,p1.second.age表示p1中存储的学生信息的年龄属性。该函数返回true表示p1 < p2,返回false表示p1 >= p2。
然后,在插入map元素时,使用sort函数和自定义排序函数即可实现排序:
```
map<string, Student> m;
// 插入元素...
vector<pair<string, Student>> vec(m.begin(), m.end());
sort(vec.begin(), vec.end(), cmp);
```
其中,vec是一个键值对pair的vector类型,可以直接使用sort函数排序,然后再将排序后的结果存入map即可。
总之,使用自定义排序函数可以方便地对map中的结构体类型的值实现排序功能。