相关疑难解决方法(0)

std :: map默认值

当密钥不存在时,有没有办法指定默认值std::mapoperator[]返回值?

c++ stdmap

76
推荐指数
8
解决办法
7万
查看次数

map <int,int>默认值

std::map<int,int> mapy;
++mapy[5];
Run Code Online (Sandbox Code Playgroud)

假设mapy[5]永远是1 是安全的吗?我的意思是,mapy[5]在'++'之前总是会得到默认值0,即使没有显式声明,就像我的代码一样?

c++ dictionary default

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

安全使用+ =运算符使用[]创建一个新的std :: map条目?

假设我有一个std::map<int, int>,这样做是否安全?

std::map<int, int> m_map;
m_map[0] += 1;
Run Code Online (Sandbox Code Playgroud)

如果0我执行此操作时地图中不存在该键,它将如何知道要添加的值1

我希望std :: map通过执行=而不是+=在值在地图中创建新条目的情况来处理此问题.这将使我不必这样做:

std::map<int, int>::iterator it = m_map.find(0);
if(it != m_map.end()) {
    it->second += 1;
}
else {
    m_map[0] = 1;
}
Run Code Online (Sandbox Code Playgroud)

c++ map

12
推荐指数
3
解决办法
1271
查看次数

如何创建自我初始化的C++基本类型?

相关问题:std :: map内置类型的默认值 - 细微的区别是我想要知道值是初始化0还是垃圾,我想指定一个"构造函数".我甚至不关心它是否涉及类定义的开销,我只想要一个干净的"特殊"基本类型.即使是语法黑客也会这样做.非基本类型很容易做到这一点,它是构造函数的全部工作.

我想要一个哈希映射,unordered_map<void *, int>但要将其所有值默认初始化为-1而不是0或者垃圾.这是因为零是一个有效的索引,我宁愿使用肯定无效的值进行默认初始化.

我想我可以看到一些草率的方法:

struct minus1 {
    int i; 
    minus1() i(-1) {}
};
unordered_map<void*, minus1>
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这个,因为我必须使用.i访问int,它实际上只需要一个int.

好的,也许我可以让我的地图处理这个:

struct PointerToIDHash {
    std::unordered_map<void *, int> h;
    PointerToIDHash() {
        // ctor is powerless to affect the initialized values of future insertions into h
    }
};
Run Code Online (Sandbox Code Playgroud)

嗯,废话现在我也有.h.Joey:嗯.我可以从模板继承吗?(听起来很可怕,但如果它可以被拉掉,这可能是一个干净的方式)

我怎样才能创建一个透明地像int一样的类型,但总是被初始化为-1

我更愿意知道如何使用和不使用C++ 11.

c++ c++11

7
推荐指数
2
解决办法
506
查看次数

在指针定义的行为映射中是否为nullptr的默认值?

以下代码似乎始终遵循true分支.

#include <map>
#include <iostream>

class TestClass {
  // implementation 
}

int main() {
  std::map<int, TestClass*> TestMap;
  if (TestMap[203] == nullptr) {
    std::cout << "true";
  } else {
    std::cout << "false";
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它是否为未初始化的指针定义了行为nullptr,或者是我的编译器的工件?

如果没有,我如何确保以下代码的可移植性?目前,我正在使用类似的逻辑来返回正确的单例实例log file:

#include <string>
#include <map>    

class Log {
  public:
    static Log* get_instance(std::string path);
  protected:
    Log(std::string path) : path(path), log(path) {};
    std::string path;
    std::ostream log;
  private:
    static std::map<std::string, Log*> instances;
};

std::map<std::string, Log*> Log::instances = std::map<std::string, Log*>();

Log* Log::get_instance(std::string path) …
Run Code Online (Sandbox Code Playgroud)

c++ big-o time-complexity c++11

6
推荐指数
1
解决办法
3397
查看次数

c ++ 03:std :: map中内置类型的默认构造函数

我一直以为代码如下

std::map<int, int> test;
std::cout << test[0] << std::endl;
Run Code Online (Sandbox Code Playgroud)

会打印随机值,因为它会在map中创建单位化值.但是,事实证明,创建的int实际上总是初始化为零,并且标准内置类型在某些情况下也是零初始化的.

问题是:当对标准类型(int/char/float/double/size_t)执行零初始化时?我很确定,如果我int i;在不知名的地方宣布,它将包含随机数据.

PS问题是关于C++ 03标准.问题的原因是,现在我不再确定何时必须为内置类型(如int/float/size_t)提供初始化,或者可以安全地省略它.

c++ stdmap c++03

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

std :: map <string,int>默认初始化值

这段代码似乎运行良好,默认值为they value_type(int)为0; 它适用于所有情况吗?

std::map<std::string,int> w;
for (const auto& t: str)
   w[t]++;
Run Code Online (Sandbox Code Playgroud)

双倍呢?地图?默认为0.0?

c++ initialization std

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

标签 统计

c++ ×7

c++11 ×2

stdmap ×2

big-o ×1

c++03 ×1

default ×1

dictionary ×1

initialization ×1

map ×1

std ×1

time-complexity ×1