c++ vector和map的使用

参考链接
MAP:https://www.cnblogs.com/panweiwei/p/6657583.html
VECTOR:https://blog.youkuaiyun.com/shuoyueqishilove/article/details/80431927

vector的初始化(元素插入)

vector<int> vec1={1,2,4};
vector<int> vec2;
vec2.push_back(1);
vec2.push_back(2);
vec2.push_back(4);
vector<int> vec3(10,0);//初始化10个为0的int型

关于vector的函数

v.empty();//检查是否为空
v.capacity();//返回当前vector中最大可以存储数据的容量
v.size();//返回v中元素的个数
v[n];//获取v中第n个元素

vector遍历

for(vector<int>::iterator it = v2.begin(); it!= v2.end();++it )  {  
                 cout<<*(it)<<endl;   }  

map的插入

map<key,value>

map<int,int> mp;
mp.insert(map<int,int>::value_type(nums[i],i));
mp[1]=2;

map的函数
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器

equal_range()    返回特殊条目的迭代器对

erase() 删除一个元素
find()  查找一个元素
insert()插入元素
max_size()返回可以容纳的最大元素个数
size()  返回map中元素的个数
swap()  交换两个map

  get_allocator()  返回map的配置器
  key_comp()       返回比较元素key的函数
  lower_bound()    返回键值>=给定元素的第一个位置
  max_size()       返回可以容纳的最大元素个数
  rbegin()         返回一个指向map尾部的逆向迭代器
  rend()           返回一个指向map头部的逆向迭代器
  upper_bound()     返回键值>给定元素的第一个位置
  value_comp()      返回比较元素value的函数
### C++ 中 `std::vector` `std::map` 的用法与区别 #### 1. **`std::vector` 的用法** `std::vector` 是 C++ 标准模板库(STL)中的动态数组容器,允许在运行时动态调整大小。它提供了随机访问的能力,并且底层实现是一个连续的内存块[^1]。 以下是 `std::vector` 的基本用法: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; // 初始化一个包含 5 个整数的向量 vec.push_back(6); // 向向量末尾添加一个元素 vec.pop_back(); // 移除向量末尾的元素 for (const auto&amp; num : vec) { // 使用范围 for 循环遍历向量 std::cout << num << " "; } std::cout << std::endl; std::vector<int>::iterator it = vec.begin(); // 获取指向第一个元素的迭代器 vec.insert(it + 2, 10); // 在第三个位置插入值为 10 的新元素 vec.erase(it + 3); // 删除第四个位置的元素 return 0; } ``` #### 2. **`std::map` 的用法** `std::map` 是一种关联容器,用于存储键值对(key-value pairs),并且按键排序。`std::map` 内部通常使用平衡二叉搜索树(如红黑树)实现,因此查找、插入删除操作的时间复杂度为 O(log n)[^2]。 以下是 `std::map` 的基本用法: ```cpp #include <iostream> #include <map> int main() { std::map<std::string, int> myMap; // 定义一个字符串作为键、整数作为值的 map myMap["apple"] = 1; // 插入键值对 myMap["banana"] = 2; std::cout << "Value of 'apple': " << myMap["apple"] << std::endl; // 访问键对应的值 if (myMap.find("orange") == myMap.end()) { // 检查键是否存在 std::cout << "'orange' is not in the map." << std::endl; } for (const auto&amp; pair : myMap) { // 遍历 map std::cout << pair.first << ": " << pair.second << std::endl; } myMap.erase("banana"); // 删除键为 "banana" 的元素 return 0; } ``` #### 3. **`std::vector` `std::map` 的主要区别** | 特性 | `std::vector` | `std::map` | |-----------------------|-------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------| | 数据结构类型 | 动态数组 | 平衡二叉搜索树 | | 存储方式 | 连续内存块 | 非连续内存块 | | 查找时间复杂度 | O(n)(线性搜索) | O(log n)(基于键的二分查找) | | 插入/删除时间复杂度 | O(1)(在末尾插入),O(n)(中间或开头插入/删除) | O(log n)(任何位置插入/删除) | | 是否有序 | 不保证顺序 | 按键自动排序 | | 元素访问方式 | 通过索引访问 | 通过键访问 | | 内存开销 | 较低 | 较高(由于树结构的存在) | #### 4. **适用场景** - **`std::vector`**:当需要快速访问元素且数据不需要频繁插入或删除时,适合使用 `std::vector`。 - **`std::map`**:当需要根据键快速查找值,或者需要维护键值对的有序性时,适合使用 `std::map`[^2]。 --- ### 示例代码对比 #### 使用 `std::vector` ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; vec.push_back(6); for (const auto&amp; num : vec) { std::cout << num << " "; } std::cout << std::endl; return 0; } ``` #### 使用 `std::map` ```cpp #include <iostream> #include <map> int main() { std::map<std::string, int> myMap; myMap["one"] = 1; myMap["two"] = 2; for (const auto&amp; pair : myMap) { std::cout << pair.first << ": " << pair.second << std::endl; } return 0; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值