我有以下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)
如果传递给的密钥find()
不存在,则find()
返回end()
.所以它说"如果没找到......".
代码可以更好地编写为:
weight2price.insert(std::make_pair(weight, price));
Run Code Online (Sandbox Code Playgroud)
所以查找不会两次.(如果密钥已存在,insert
则不会执行任何操作.)
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>对的指针.
希望这可以帮助!