相关疑难解决方法(0)

如何查找C++ std :: map中是否存在给定键

我正在尝试检查给定的密钥是否在地图中,有些不能这样做:

typedef map<string,string>::iterator mi;
map<string, string> m;
m.insert(make_pair("f","++--"));
pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want
cout << p.first;//I'm getting error here
Run Code Online (Sandbox Code Playgroud)

那么如何打印p中的内容呢?

c++ dictionary stl

412
推荐指数
9
解决办法
50万
查看次数

当我应该使用std :: map :: at来检索map元素

我已经在stackoverflow上阅读了关于web和问题的不同文章,但对我来说,目前尚不清楚是否有更好的std::map::at用于检索map元素的情况.

根据定义,std::map::at

返回对使用键k标识的元素的映射值的引用.

如果k与容器中任何元素的键不匹配,则该函数抛出out_of_range异常.

仅限于我std::map::at在100%确定存在具有特定键的元素时值得使用的情况,否则您应该考虑异常处理.

  1. 有没有哪种情况std::map::at被认为是最有效和优雅的方式?在什么情况下你会建议使用std::map::at
  2. 我是对的,map::find()当有可能没有带有这样一个键的元素时,最好使用它吗?并且map::find()它更快,更好的方法?
if ( map.find("key") != map.end() )
{
    // found 

} else
{
    // not found
}
Run Code Online (Sandbox Code Playgroud)

PS

map::operator[] 有时可能很危险,因为如果一个元素不存在,那么它会插入它.

编辑:链接以某种方式相关链接1 链接2 链接3 链接4 链接5 链接6

c++ stdmap c++11

46
推荐指数
4
解决办法
2万
查看次数

将一系列值映射到单个值

我需要映射值之间的范围lowerBound,并upperBound以一定的价值.

说明性示例:

例如,假设我有GPS系统,用户订阅了它.该系统能够为我提供用户与某一点的距离.根据用户的距离,我想为他们分配一个ID.

从而远离用户

  • 1100获得ID: 8.4
  • 101200获得ID: 7.2
  • 201300获得ID: 3.6
  • 401600获得ID: 4.1

等等...

我的方法:

所以我做了什么,我创建了一个std::map初始化如下:

   std::map<int, double> distanceToIdMap; 

   distanceToIdMap =
    {
            {100, 8.4},
            {200, 7.2},
            {300, 3.6},
    };
Run Code Online (Sandbox Code Playgroud)

然后我使用此代码获取给定距离的ID:

double roundUpToHundred = std::ceil(realDistance / 100.0) * 100;
double powerForDistance = distanceToIdMap.at(roundUpToHundred);
Run Code Online (Sandbox Code Playgroud)

然而,我的方法401对于600距离来说是分解的,因为天花板到距离的最接近的百度400+我得到的值500我在地图中没有条目.当然,平凡的解决办法是添加一个条目500distanceToIdMap,但是这是我不希望如何处理这个问题.

我想有一个{(lowerbound, upperbound) , …

c++ c++11

5
推荐指数
1
解决办法
1642
查看次数

标签 统计

c++ ×3

c++11 ×2

dictionary ×1

stdmap ×1

stl ×1