假设我有一个问题陈述,我的函数接收一个字符串(所有字母表),并且我需要存储所有字母表的索引。例如
If input is aabbacd
then I need something like
a -> 0, 1, 4
b -> 2, 3
c -> 5
d -> 6
现在,我想创建一个 char 到 vector 的映射,但最终创建了一个 char 到 vector *的映射。
function(String s)
{
map<char, vector<int> > m;
for(i = 0; i < s.size(); i++)
{
if(m.find(s[i]) == m.end())
{
//create new vector and push 'i'
vector<int>* v = new vector<int>(); // If I create a vector here, then that will only be live till the closing brace of the if
.... // rest of the code
考虑到 c++ STL 已经处理了所有指针管理,我知道创建一个 vector * 并不是最好的选择。但在这种情况下我能做什么,以便在 if block 内创建的 vector 在外部也保持事件状态?
最佳答案
STL 容器按值保存元素,即,它复制您要使用的 vector 。所以你担心 vector 超出范围基本上是徒劳的。只需创建一个法线 vector 并将其移动到容器中即可。示例:
map<char, vector<int>> m;
for (std::size_t i = 0; i < s.size(); ++i) {
vector<int> v;
// populate v
m.emplace(character, std::move(v));
// now m holds its own *copy* of the vector
}
事实上,您似乎使这个过程过于复杂化了。它可以很简单:
map<char, vector<std::size_t>> m;
for (std::size_t i = 0; i < s.size(); ++i)
m[s[i]].push_back(i);
return m;
感谢 cplusplusrat .
关于c++ - 在 C++ 中动态创建 vector 并添加到 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57343443/