我有一些使用问题std::map
:
enum
在std::map
一个良好的实践中使用一个关键?请考虑以下代码:
enum Shape{ Circle, Rectangle }; int main(int argc, char* argv[]) { std::mapstrMap; // strMap.insert(Shape::Circle,"Circle"); // This will not compile strMap[Shape::Circle] = "Circle"; // But this will work return 0; }
在上面的示例中,为什么insert()
在重载[]
运算符正常工作时调用生成编译器错误?建议将哪些方法插入到std::map
?
我知道当在类find()
上使用该方法时std::map
,它不是在容器中进行顺序搜索,而是进行一些对数搜索,这将比顺序搜索快得多.这种理解是否正确?
gimpf.. 12
将枚举作为key_type本身并不坏.(编辑)但是如果你只使用顺序枚举值,那么std::vector
使用O(1)访问会更好.
insert
必须像这样使用:mapVar.insert(make_pair(key, value));
另见cppreference.com.
是的,std::map
具有O(log(n))查找,由标准保证,如果n足够高,则比O(n)快.
Alan.. 5
插入失败,因为value_type是std :: pair
将枚举作为key_type本身并不坏.(编辑)但是如果你只使用顺序枚举值,那么std::vector
使用O(1)访问会更好.
insert
必须像这样使用:mapVar.insert(make_pair(key, value));
另见cppreference.com.
是的,std::map
具有O(log(n))查找,由标准保证,如果n足够高,则比O(n)快.
插入失败,因为value_type是std :: pair