我需要将值插入std :: map(或它等效)到任何空闲位置,然后获取它的键(稍后删除/修改)。类似的东西:
std::map<int, std::string> myMap;
const int key = myMap.insert("hello");
是否可以使用std :: map或者是否有适当的容器?
谢谢。
答案 0 :(得分:2)
除了使用set
之外,您还可以保留已分配(或免费)的列表
密钥,并在插入之前找到新密钥。对于索引的map
int
,您可以简单地取最后一个元素,并递增其键。但
我宁愿认为我会选择一个简单的std::vector
;如果删除不是
支持,你可以做一些简单的事情:
int key = myVector.size();
myVector.push_back( newEntry );
如果你需要支持删除,那么使用某种类型的向量
“也许”类型(boost::optional
等等 - 你可能已经拥有了
一个在您的工具箱中,可能名为Fallible或Maybe)
适当。取决于使用模式(删除的数量与
总条目等),您可能想要搜索向量
重用条目。如果你真的雄心勃勃,你可以保留一个位图
免费条目,每次删除和输入时设置一点,以及
重复使用空间时重置它。
答案 1 :(得分:1)
您可以将对象添加到std :: set,然后将整个集合放入地图中。但不,你不能在没有钥匙的情况下将价值放入地图。
答案 2 :(得分:1)
最接近你要做的事情可能是
myMap[myMap.size()] = "some string";
这比std::set
的唯一优势是你可以将整数索引传递给其他模块而不需要知道std::set<Foo>::iterator
或类似的类型。
答案 3 :(得分:0)
这是不可能的。这种操作需要复杂的密钥类型知识才能知道哪些密钥可用。例如,std :: map必须为int映射增加int值,或者附加到字符串映射的字符串。
你可以使用std :: set并完全删除键控。
答案 4 :(得分:0)
如果要在SQL数据库中实现与自动生成的主键类似的操作,则可以维护计数器并使用它来生成唯一键。但也许std :: set是你真正需要的。