我正在解决一个程序以防止地图上出现重复值,我编写了以下程序
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。连续分配方法生成的键之间的值重复。
答案 0 :(得分:1)
我做错了什么
也许。这取决于您打算做什么。
std::map::upper_bound
使用的 operator[]
查找具有比操作数更大的 键的元素。您的地图不包含任何大于5 †的键,因此该操作将返回结束迭代器。
您的operator[]
然后递减迭代器,在结束迭代器的情况下,这将导致迭代器返回最后一个元素。地图中的最后一个元素是键值对3, k
,因此返回k
。
†正如您所解释的,test.assign(4,7, 'k')
调用没有任何作用。