首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用unordered_sets的unordered_map

使用unordered_sets的unordered_map
EN

Stack Overflow用户
提问于 2011-05-04 13:18:34
回答 2查看 2.4K关注 0票数 1

如果我有一个由字符串索引的unordered_sets的无序映射,比如

代码语言:javascript
复制
static boost::unordered_map<std::string, boost::unordered_set<std::string> > UseMap;

关于使用这种数据结构,我有几个问题。有没有办法将一个新值插入到映射中索引的集合中,而不必使用指向该集合的指针或重新索引映射值?

第二个问题,当我试图索引到地图时,我得到了一个未解决的外部符号错误。举个例子,

代码语言:javascript
复制
void AddUse(const std::string &character, const std::string& used)
{
    auto set = UseMap[character];
    set.insert(used);
    UseMap[character] = set;

}

我不确定为什么这会导致一个未解决的符号错误,所以这里的任何指导都会有所帮助。

提前感谢

编辑:任何UseMapcharacter的使用都会导致无法解析的符号错误

还添加了错误代码和源代码示例

完整的类

代码语言:javascript
复制
#pragma once
#ifndef _SINGLEUSE_H_
#define _SINGLEUSE_H_
#include <boost/unordered_map.hpp>
#include <boost/unordered_set.hpp>
#include <string>
#include <vector>
class SingleUse
{
public:
    void AddUse(const std::string& character, const std::string& used)
    {
        UseMap[character].insert(used);
    }

    bool HasUsed(const std::string &character, const std::string& used)
    {
        return false;//UseMap[character].find(used) != UseMap[character].end();
    }

    void ClearAll()
    {
        UseMap.clear();
    }
private:
    static boost::unordered_map<std::string, boost::unordered_set<std::string> > UseMap;
};

和完整的错误消息:

错误52错误LNK2001:未解析的外部符号"private:静态类boost::unordered_map,类std::allocator >,类boost::unordered_set,类std::allocator >,结构boost::hash,类std::allocator > >,结构std::equal_to,类std::allocator > >,类std::allocator > >,类std::allocator > >,结构boost::hash,类std::allocator > >,结构std::equal_to,类std::allocator >>,类std::allocator >>,类boost::unordered_set,类std::allocator >,结构boost::hash,类std::allocator > >,结构std::equal_to,类std::allocator > >,类std::allocator,类std::allocator >>> SingleUse::UseMap“(?UseMap@SingleUse@@0V?$unordered_map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$unordered_set@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$hash@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@boost@@U?$equal_to@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@boost@@U?$hash@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@4@U?$equal_to@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$unordered_set@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$hash@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@boost@@U?$equal_to@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@boost@@@std@@@2@@boost@@A) G:\Documents\Programming Projects\KHMP\KHMP_Repo\KHMP\build\KHMP\KHMP\KHMPMain.obj

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-04 15:31:45

第一个问题,是的,只要你把结果赋值给一个引用就可以了。

执行以下操作:

代码语言:javascript
复制
boost::unordered_set<std::string>& set = UseMap[character];

现在,set是对映射中某个值的引用。(我不确定auto为您提供了什么,所以我将该类型放在full中;您也许可以使用auto。)对set所做的任何更改都将反映在地图中。

代码语言:javascript
复制
set.insert(used); // This updates the map, no need to write it back in.
票数 3
EN

Stack Overflow用户

发布于 2011-05-04 16:59:20

好的,未解析的符号是因为我没有在任何地方实例化静态变量。我忘了你必须在C++中这样做,这是我的错误。感谢你对布景的帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5878907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档