stl :: map中运算符[]的奇怪行为

时间:2018-10-08 09:49:06

标签: c++ c++11

我正在解决一个程序以防止地图上出现重复值,我编写了以下程序

preds = text_clf_svm.predict_proba(docs)
preds_idx = np.argsort(preds, axis=1)[-2:]

for i,d in enumerate(docs):
    print d,"=>"
    for p in preds_idx[i]:
        print(text_clf_svm.classes_[p],"(",preds[i][p],")")

cout << test [5]即使未分配到映射也返回k。这怎么可能,我做错了什么,还是操作数[]的默认行为?上面的程序创建间隔为in的键并为其分配相同的值,例如test.assign(2,4,'k')创建从to到2,3的键并为其分配值k。连续分配方法生成的键之间的值重复。

1 个答案:

答案 0 :(得分:1)

  

我做错了什么

也许。这取决于您打算做什么。

std::map::upper_bound使用的

operator[]查找具有比操作数更大的 键的元素。您的地图不包含任何大于5 的键,因此该操作将返回结束迭代器。

您的operator[]然后递减迭代器,在结束迭代器的情况下,这将导致迭代器返回最后一个元素。地图中的最后一个元素是键值对3, k,因此返回k


正如您所解释的,test.assign(4,7, 'k')调用没有任何作用。