at 成员函数类似于 operator[],但如果键不存在,它会抛出一个 std::out_of_range 异常。因此,使用 at 时需要准备好处理可能的异常。 cpp #include <iostream> #include <map> #include <string> #include <stdexcept> int main() { std::map<int, std::string> my...
const T& at( const Key& key ) const; (2) (C++11 起) 返回到拥有等于 key 的关键的元素被映射值的引用。若无这种元素,则抛出 std::out_of_range 类型异常。 参数 key - 要找到的元素的关键 返回值 到请求元素的被映射值的引用 异常 若容器无拥有指定 key 的元素则为 std::out_of_range ...
缺陷报告 缺陷报告应用于出版时的行为正确行为 LWG 230C++98Key不需要满足可复制构造(CopyConstructible) (因此不保证能构造Key类型的键)Key也需要满足 可复制构造(CopyConstructible) LWG 464C++98以键访问 constmap不方便提供at函数 参阅
std::cout << _map.at(4).c_str() << std::endl;//因为已经有4了,不会报错 std::cout << _map[300].c_str() << std::endl;//ID_Name中没有关键字200,使⽤[]取值会导致插⼊,因此不会报错,但打印结果为空 ⽤find函数来定位数据出现位置,它返回的⼀个迭代器,当数据出现时,它...
std::cout << _map.at(4).c_str() << std::endl;//因为已经有4了,不会报错 std::cout << _map[300].c_str() << std::endl;//ID_Name中没有关键字200,使用[]取值会导致插入,因此不会报错,但打印结果为空 1. 2. 3. 4. 5.
可能的输出: 1) out_of_range::what(): map::at: key not found 2) out_of_range::what(): map::at: key not found缺陷报告下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。 缺陷报告 应用于 出版时的行为 正确行为 LWG 464 C++98 map 没有这个成员函数 添加该函数 LWG 703 C++98 ...
对于C++11,可以使用map::at。它有const和non-const两个版本,对于找不到匹配关键字的情况,会抛出out_of_range。由于下标检查,也带来了性能代价。 结论:许多成员函数都设置了const和non-const两个版本,在这样的情况下就发挥了它的意义。今后使用时也应当注意功能相同或相似的函数之间细微的区别。
rb_tree 的 iterator 的数据结构很简单,只包含一个 rb_tree_node_base 指针,但是其++/--操作却不见得简单(具体实现函数不在头文件中,而在 libstdc++ 库文件中)。 // definedinlibrary, notinheader rb\_tree\_node\_base\* rb\_tree\_increment\(rb\_tree\_node\_base\* node\); ...
我试图避免锁定以使其尽可能快。 (我知道,yaya 可能过早优化) const的所有成员函数对于多个读取器都是线程安全的。 调用myMap["xyz"]不是线程安全的,因为std::map::operator[]未声明为const。调用myMap.at("xyz")是线程安全的,因为std::map::at被声明为const。
3,4) 寻找键比较等价于值x 的元素。此重载参与重载决议仅若限定标识 Compare::is_transparent 合法并指代类型。它允许调用此函数时无需构造 Key 的实例。参数key - 要搜索的元素键值 x - 能透明地与键比较的任何类型值 返回值指向所需元素的迭代器。若找不到这种元素,则返回尾后(见 end())迭代器。