将“”键插入地图

问题描述:

将键值对插入到地图中时,如果键是“”并且对应该值,则会出现什么行为。例如将“”键插入地图

std::map<std::string, std::string> map1; 
std::string key = ""; 
std::string value = "xyz"; 

map1.insert(std::pair<std::string, std::string>(key, value)); 

而处理这种情况的最佳方法是什么?

+0

你是问,如果'地图:: insert'对空字符串中的特殊行为? – juanchopanza

+0

juanchopanza有没有特别的行为?这种情况是否有效?我怎样才能避免这种特殊情况? – user2235747

+0

不,没有任何特别的行为,但是你的问题暗示它是,或者你没有阅读任何'map :: insert'的文档。 – juanchopanza

std::string没有特殊的状态或值“null”。用""初始化的字符串只是一个空字符串,但它仍然是一个像其他任何字符串一样的字符串。将它用作密钥时,std::map::insert将执行以前的操作:仅当没有具有相同密钥的元素已存在时才插入该元素。

请注意,您可以检查是否插入使用的返回值的第二个成员成功:

auto res = map1.insert(std::pair<std::string, std::string>(key, value)); 
std::cout << std::boolalpha; 
std::cout << "Success? " << res.second << '\n'; // Success? true 

// try again (and fail) 
auto res = map1.insert(std::pair<std::string, std::string>(key, value)); 
std::cout << "Success? " << res.second << '\n'; // Success? false