gpt4 book ai didi

c++ - vector 调整大小不起作用?

转载 作者:行者123 更新时间:2023-11-30 01:52:58 27 4
gpt4 key购买 nike

<分区>

我有 3 个映射,其中一个字符串作为键,一个 vector 作为值。

std::map<std::string, std::vector<int> >          m_attri;   ///< Attributes of type int
std::map<std::string, std::vector<double> > m_attrd; ///< Attributes of type double
std::map<std::string, std::vector<std::string> > m_attrs; ///< Attributes of type std::string

我有一个函数可以调整它们的大小,调用 SetNum()

void SetNum(size_t n)
{
std::cout << "setting num: " << n << std::endl;
m_num = n;
for (auto attr : m_attri) {
attr.second.resize(n, 0);
std::cout<<attr.second.size();
}
for (auto attr : m_attrd) {
attr.second.resize(n, 0.0);
std::cout<<attr.second.size();
}
for (auto attr : m_attrs) {
attr.second.resize(n, "");
std::cout<<attr.second.size();
}
std::cout<<std::endl;
}

这一切似乎都有效,当说 setnum(1) 时,我得到一堆 1 作为输出。

现在问题就出在这里,我有另一个函数叫Set

template<typename T>
inline void AttributeContainer::Set(size_t node_idx, const std::string& name, T value)
{
std::cout << GetNum() << node_idx << ',' << std::endl;
if( node_idx >= GetNum()){
SetNum(node_idx+1);
}
auto attr_kv = Attributes<T>().find(name);
if (attr_kv != Attributes<T>().end()) {
std::cout<<"Containersize: " << attr_kv->second.size() << ',' << "id:"<< node_idx<< std::endl;
attr_kv->second.at(node_idx) = value;
std::cout<<"ContainersizeDone: " << attr_kv->second.size() << std::endl;
} else {
throw std::runtime_error("AttributeContainer::Set(): attribute not found: " + name);
}
}

node_idx为0,找到 vector 。但似乎调整大小没有用,因为虽然我得到确认它已调整大小的输出,但我从 at 得到一个 out_of_range 异常,上面的行显示大小为 0。现在这很奇怪,因为我认为我成功地调整了它们的大小?

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com