我想存储Connected-component labeling algorithm的等价值。它基本上(从相当于前者的标签标识。)制作样图从一个值(一个标签的ID)到多个值如何高效地存储等值(来自连接组件标记算法)?
我已经做了这样的事情,但它不工作非常好:
equivalences.at(i).push_back(equivalent_labels_int);
这种方法的主要缺点是,我要在前面声明map
的大小(它必须足够大),然后大:
std::map<unsigned short, std::list<unsigned int>> equivalences;
for(int i = 0; i < MAX_NUMBER_OF_LABELS; ++i)
{
std::list<unsigned int> temp;
temp.push_back(i);
// note that a label is equivalent to itself
equivalences.insert(std::pair< int, std::list<unsigned int>>(i, temp));
}
然后,我通过添加适当的等价大小(例如9999)的初始化时间是a大约2.5s。
任何人有更好的主意吗?
非常感谢!你能解释我2件事情:1)'.at(...)'和'[]运算符'有什么区别? 2)我不关心元素的顺序,也不会从中间移除元素,因此我正确理解'vector'会很好吗? – Patryk 2012-01-15 20:58:55
当然! '.at'成员函数将查找与关键字相关的值,并在关键字不存在时抛出'out_of_range'异常。当钥匙应该存在时,它主要用于在地图中查找。 'operator []'成员函数也会查找一个值,但如果指定的键不存在,它将自动插入一个新的键/值对。成语'myMap [myKey]'因此可以用来表示“查找与myKey相关的内容,如果它不存在,则创建一个默认值。”是的,你应该在这种情况下使用'vector'。 – templatetypedef 2012-01-15 21:01:08