以下两行有什么区别?
map<int, float> map_data;
map<const int, float> map_data;
Run Code Online (Sandbox Code Playgroud) 我有以下问题涉及迭代使用定义的字符串的关联数组std::map.
-- snip --
class something
{
//...
private:
std::map<std::string, std::string> table;
//...
}
Run Code Online (Sandbox Code Playgroud)
在构造函数中,我使用与字符串数据相关联的字符串键对填充表.在其他地方我有一个方法toString返回一个字符串对象,该对象包含表对象中包含的所有键和相关数据(如key =数据格式).
std::string something::toString()
{
std::map<std::string, std::string>::iterator iter;
std::string* strToReturn = new std::string("");
for (iter = table.begin(); iter != table.end(); iter++) {
strToReturn->append(iter->first());
strToReturn->append('=');
strToRetunr->append(iter->second());
//....
}
//...
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我收到以下错误:
error: "error: no match for call to ‘(std::basic_string<char,
std::char_traits<char>, std::allocator<char> >) ()’".
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释失踪的是什么,我做错了什么?hash_map在用户必须定义散列函数以便能够hash_map与std::string对象一起使用的情况下,我才发现有关类似问题的一些讨论.在我的情况下也可能是类似的东西?
如何将两个STL地图合并为一个?它们都具有相同的键值类型(map).如果键有重叠,我想优先考虑其中一个地图.
我想知道为什么我不能将STL映射用于用户定义的类.当我编译下面的代码时,我得到这个神秘的错误消息.这是什么意思?此外,为什么它只发生在用户定义的类型?(当用于密钥时,原始类型是可以的)
C:\ MinGW\bin ..\lib\gcc\mingw32\3.4.5 ........\include\c ++\3.4.5\bits\stl_function.h ||在成员函数`bool std :: less <_Tp> :: operator()(const _Tp&,const _Tp&)const [with _Tp = Class1]':
C:\ MinGW\bin ..\lib\gcc\mingw32\3.4.5 ........\include\c ++\3.4.5\bits\stl_map.h | 338 |从`_Tp&std ::实例化map <_Key,_Tp,_Compare,_Alloc> :: operator [](const _Key&)[with _Key = Class1,_Tp = int,_Compare = std :: less,_Alloc = std :: allocator>]'|
C:\ Users\Admin\Documents\dev\sandbox\sandbox\sandbox.cpp | 24 |从这里实例化|
C:\ MinGW\bin ..\lib\gcc\mingw32\3.4.5 ........\include\c ++\3.4.5\bits\stl_function.h | 227 |错误:不匹配'运算符<'in'__ x <__y'| || ===构建完成:1个错误,0个警告=== |
#include <iostream>
#include <map>
using namespace std;
class Class1
{
public:
Class1(int id);
private:
int id; …Run Code Online (Sandbox Code Playgroud) 我已经在stackoverflow上阅读了关于web和问题的不同文章,但对我来说,目前尚不清楚是否有更好的std::map::at用于检索map元素的情况.
根据定义,std::map::at
返回对使用键k标识的元素的映射值的引用.
如果k与容器中任何元素的键不匹配,则该函数抛出out_of_range异常.
仅限于我std::map::at在100%确定存在具有特定键的元素时值得使用的情况,否则您应该考虑异常处理.
std::map::at被认为是最有效和优雅的方式?在什么情况下你会建议使用std::map::at?map::find()当有可能没有带有这样一个键的元素时,最好使用它吗?并且map::find()它更快,更好的方法?Run Code Online (Sandbox Code Playgroud)if ( map.find("key") != map.end() ) { // found } else { // not found }
PS
map::operator[] 有时可能很危险,因为如果一个元素不存在,那么它会插入它.
我有一张地图,即valueMap
typedef std::map<std::string, std::string>MAP;
MAP valueMap;
...
// Entering data.
Run Code Online (Sandbox Code Playgroud)
然后我通过引用将此映射传递给函数
void function(const MAP &map)
{
std::string value = map["string"];
// By doing so I am getting an error.
}
Run Code Online (Sandbox Code Playgroud)
如何从地图中获取值,该值作为函数的引用传递?
因此,似乎有两种通常可接受的方法来确定密钥是否存在于std :: map中:
map.find(key) != map.end()
map.count(key) > 0
Run Code Online (Sandbox Code Playgroud)
一个比另一个更有效吗?具体来说,count()的概念可以被解释为意味着该方法将迭代每个键,计算总计数(并且由于std :: map的定义,总计数将始终为0或1).count()保证在匹配后"停止",以与find()相同的复杂度运行吗?
我正在寻找std :: map的最高键值(由比较运算符定义).
这是保证
map.rbegin()->first
Run Code Online (Sandbox Code Playgroud)
?
(我在反向迭代器上有点不稳定,在std :: map的实现中有多少自由度)
如果没有,请告知.我无法改变数据结构.
例如,我有一个已知sizeof(A)和sizeof(B)的std :: map,而map里面有N个条目.你会如何估计它的内存使用量?我会说它就像是
(sizeof(A) + sizeof(B)) * N * factor
Run Code Online (Sandbox Code Playgroud)
但是因素是什么?可能不同的公式?
也许要求上限更容易?