C++地图是什么意思?

lad*_*afa 2 c++ map

我有以下C++地图示例代码:

map<string,string> &weight2price  
....  
weight = ...  
price = ...  
if(weight2price.find(weight) == weight2price.end())  
    weight2price[weight] = price;
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我它意味着什么

if(weight2price.find(weight) == weight2price.end())
Run Code Online (Sandbox Code Playgroud)

GMa*_*ckG 7

如果传递给的密钥find()不存在,则find()返回end().所以它说"如果没找到......".

代码可以更好地编写为:

weight2price.insert(std::make_pair(weight, price));
Run Code Online (Sandbox Code Playgroud)

所以查找不会两次.(如果密钥已存在,insert则不会执行任何操作.)


Ioa*_*rau 6

STL Map是标准的C++容器.它使用可以比较的唯一键来引用存储在容器内的值数据.它的工作方式与数组非常相似,但与数组不同,键可以是任何东西,不需要是整数.地图的语法是:

std::map < Key, Data, Compare, Alloc>
Run Code Online (Sandbox Code Playgroud)

Key - 将用作键
数据的对象类型 - 将用作数据的对象类型
比较 - 键的比较函数
Alloc - 映射的分配器,用于所有内部存储器管理

用法:

map[Key] = Data
Run Code Online (Sandbox Code Playgroud)

有关STL地图的进一步阅读,请访问:http: //en.wikipedia.org/wiki/Map_%28C%2B%2B%29 ,此处:http://www.sgi.com/tech/stl/Map.html

在代码段中,您正在使用地图中的函数find().此函数返回一个迭代器,该迭代器指向包含您要搜索的键的映射中的元素.如果找不到该键,则find函数将返回指向地图末尾的迭代器.这就是你附加到你的问题的代码片段中检查的内容,如果find函数返回了end迭代器的值,这意味着该键不在map中,因此它将键和数据添加到map中.GMan在他的评论中提供了对代码的优化.

迭代器的一个非常基本的解释(虽然不完整)是迭代器是指向<Key,Data>对的指针.

希望这可以帮助!