考虑C++中有序和无序的关联容器double.
是NaN有效的密钥类型吗?
对于有序的容器,我应该说"不",因为它不尊重严格的弱排序.
对于无序容器,我不知道.
以下是GCC 4.6.2中发生的情况:
#include <map>
#include <unordered_map>
#include <cmath>
#include <iostream>
#include <prettyprint.hpp>
int main()
{
typedef std::map<double, int> map_type; // replace by "unorderd_map"
map_type dm;
double d = std::acos(5); // a good nan
dm[d] = 2;
dm[d] = 5;
dm[d] = 7;
std::cout << "dm[NaN] = " << dm[d] << ", dm = " << dm << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
对于有序地图,我得到:
dm[NaN] = 7, dm = [(nan, 7)]
Run Code Online (Sandbox Code Playgroud)
对于无序地图,我得到:
dm[NaN] = 0, dm …Run Code Online (Sandbox Code Playgroud)