我在头文件中的类中定义了一个映射,如下所示:
std::map<int, char> mCompletedIds;
我可以在这里使用向量,因为我只需要存储已经完成的id。但要快速找到,我正在使用地图。所以,我总是把对的第二个参数作为0。
现在,在其中一个fns中。上课,我正在寻找。
std::map<int, char>::iterator it = mCompletedIds.find(id); //id is defined above
在这个声明中,我收到了SIGBUS。是因为目前地图是空的吗?任何人都可以。帮助我理解原因。
谢谢, SG
答案 0 :(得分:3)
如果您只想要一个数字存储,可以使用std::set<int>
要查看是否存在值,请使用
std::set<int> mCompletedIds;
bool found = mCompletedIds.count(id) != 0;
您的SIGBUS错误通常是由错误的对齐或代码中发生的其他一些损坏引起的,而valgrind之类的工具可能会向您显示您的真实错误。
答案 1 :(得分:1)
std::set
就是您所需要的:cppRef
int id = 0;
std::set<int> idList;
std::set<int>::iterator it = idList.find(id); //see also count function
if (it != idList.end()) { // find will return set::end if the element is not found
// id is in your list
} else {
// id isn't in your list
}