标签: map

map operator []操作数

大家好,我在成员函数中有以下内容

int tt = 6; 
vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt]; 
set<int>& egressCandidateStops = temp.at(dest);
Run Code Online (Sandbox Code Playgroud)

以及成员变量的以下声明

map<int, vector<set<int>>> m_egressCandidatesByDestAndOtMode;
Run Code Online (Sandbox Code Playgroud)

但编译时遇到错误(英特尔编译器11.0)

1>C:\projects\svn\bdk\Source\ZenithAssignment\src\Iteration\PtBranchAndBoundIterationOriginRunner.cpp(85): error: no operator "[]" matches these operands
1>            operand types are: const std::map<int, std::vector<std::set<int, std::less<int>, std::allocator<int>>, std::allocator<std::set<int, std::less<int>, std::allocator<int>>>>, std::less<int>, std::allocator<std::pair<const int, std::vector<std::set<int, std::less<int>, std::allocator<int>>, std::allocator<std::set<int, std::less<int>, std::allocator<int>>>>>>> [ const int ]
1>          vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt]; 
1>                                                                    ^
Run Code Online (Sandbox Code Playgroud)

我知道它必须是愚蠢的,但我看不出我做错了什么.

UPDATE我从const成员函数调用它,这就是为什么成员变量的类型是const所以我认为类似下面的内容应该修复它:

int dest = 0, tt = 6; 
const set<int>& egressCandidateStops = m_egressCandidatesByDestAndOtMode[tt].at(dest); 
Run Code Online (Sandbox Code Playgroud)

但没有骰子......仍然是同样的错误.

c++ map operands

13
推荐指数
2
解决办法
6682
查看次数

带删除的C++ map迭代

我找不到如何做到这一点的实例,所以我希望有人可以帮助我.我在类中定义了如下地图:

std::map<std::string, TranslationFinished> translationEvents;
Run Code Online (Sandbox Code Playgroud)

TranslationFinished是一个boost :: function.我有一个方法作为我的类的一部分,迭代遍历此映射,调用每个函数,如下所示:

void BaseSprite::DispatchTranslationEvents()
{
    for(auto it = translationEvents.begin(); it != translationEvents.end(); ++it)
    {
        it->second(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,被调用的函数可以it->second(this);使用以下函数从translationEvents映射(通常是自身)中删除元素:

bool BaseSprite::RemoveTranslationEvent(const std::string &index)
{
    bool removed = false;
    auto it = translationEvents.find(index);
    if (it != translationEvents.end())
    {
        translationEvents.erase(it);
        removed = true;
    }
    return removed;
}
Run Code Online (Sandbox Code Playgroud)

执行此操作会导致调试断言在DispatchTranslationEvents()尝试递增迭代器时失败.有没有办法安全地遍历地图,迭代期间函数调用可能会从地图中删除元素?

提前致谢

编辑:意外地C/Pd错误的删除事件代码.现在修复了.

c++ iteration map c++11

13
推荐指数
3
解决办法
4781
查看次数

从AutoMapper定义的映射中获取所有已定义的映射

我们假设我有两个类:CD和CDModel,映射定义如下:

Mapper.CreateMap<CDModel, CD>()
    .ForMember(c => c.Name, opt => opt.MapFrom(m => m.Title));
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以从映射中检索原始表达式,c => c.Name(对于源)和m => m.Title(对于目标)?

我试过这个,但是我想念一些东西......

var map = Mapper.FindTypeMapFor<CDModel, CD>();
foreach (var propertMap in map.GetPropertyMaps())
{
    var source = ???;
    var dest = propertMap.DestinationProperty.MemberInfo;
}
Run Code Online (Sandbox Code Playgroud)

如何获取源和目标表达式?

expression map automapper

13
推荐指数
1
解决办法
6591
查看次数

stl map operator []不好?

我的代码审查员已经指出地图的operator []的使用非常糟糕并导致错误:

map[i] = new someClass;    // potential dangling pointer when executed twice
Run Code Online (Sandbox Code Playgroud)

要么

if (map[i]==NULL) ...      // implicitly create the entry i in the map 
Run Code Online (Sandbox Code Playgroud)

虽然我理解读取API之后的风险insert(),因为它检查重复是更好的,因此可以避免悬空指针发生,我不明白,如果处理得当,为什么[]不能使用呢?

我选择map作为我的内部容器,因为我想使用它快速且自我解释的索引功能.

我希望有人可以和我争论更多或站在我身边:)

c++ stl map operators

13
推荐指数
2
解决办法
2万
查看次数

Clojure将多个地图合并为一个地图

我有以下地图列表

({"child.search" {:roles #{"ROLE_ADM_UNSUBSCRIBE_SUBSCRIPTION" "ROLE_ADM_SEARCH_SUBSCRIPTION" "ROLE_ADM_VIEW_SUBSCRIPTION"}},
  "child.cc.search" {:roles #{"ROLE_ADM_CC_SEARCH_SUBSCRIPTION" "ROLE_ADM_CC_VIEW_SUBSCRIPTION"}}}
  {"child.abusereport" {:roles #{"ROLE_ADM_ABUSE_RPT"}},
   "child.manualfiltering" {:roles #{"ROLE_ADM_MANUAL_FILTERING_RPT"}}}
  {"child.assigned.advertisement" {:roles #{"ROLE_ADM_CREATE_ADVERTISING"}},
   "child.manage.advertisement" {:roles #{"ROLE_ADM_LIST_ADVERTISING"}}})
Run Code Online (Sandbox Code Playgroud)

我需要有一个像下面这样的地图.

{"child.search" {:roles #{"ROLE_ADM_UNSUBSCRIBE_SUBSCRIPTION" "ROLE_ADM_SEARCH_SUBSCRIPTION" "ROLE_ADM_VIEW_SUBSCRIPTION"}}
"child.cc.search" {:roles #{"ROLE_ADM_CC_SEARCH_SUBSCRIPTION" "ROLE_ADM_CC_VIEW_SUBSCRIPTION"}}
"child.abusereport" {:roles #{"ROLE_ADM_ABUSE_RPT"}}
"child.manualfiltering" {:roles #{"ROLE_ADM_MANUAL_FILTERING_RPT"}}
"child.assigned.advertisement" {:roles #{"ROLE_ADM_CREATE_ADVERTISING"}}
"child.manage.advertisement" {:roles #{"ROLE_ADM_LIST_ADVERTISING"}}}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

list clojure map

13
推荐指数
2
解决办法
8334
查看次数

对于空地图,map :: begin()的返回值是多少?

我使用这样的东西:

map<string, Data>::iterator it  = mymap->begin();
map<string, Data>::iterator end = mymap->end();

while (it != end) {
    // do stuff
    ++it;
}
Run Code Online (Sandbox Code Playgroud)

我只是想知道即使地图是空的,这是否也能正常工作.如果地图为空,我找不到有关map :: begin()返回的任何信息.

c++ stl map

13
推荐指数
1
解决办法
8058
查看次数

如何创建一个静态Map of String - > Array

我需要创建一个静态Map,将给定String的数组映射到int.

换句话说,我想定义类似的东西:

"fred" -> {1,2,5,8}
"dave" -> {5,6,8,10,11}
"bart" -> {7,22,10010}
... etc
Run Code Online (Sandbox Code Playgroud)

在Java中有一种简单的方法吗?

如果可能的话,我想对static常量Stringint值使用常量.

编辑:为了阐明我static对值的常量的意义,并给出我认为正确的代码,这是我对解决方案的第一次尝试:

public final static String FRED_TEXT = "fred";
public final static String DAVE_TEXT = "dave";

public final static int ONE = 1;
public final static int TWO = 2;
public final static int THREE = 3;
public final static int FOUR = 4;

public final static HashMap<String, int[]> myMap = …
Run Code Online (Sandbox Code Playgroud)

java static map

13
推荐指数
3
解决办法
5万
查看次数

Groovy按值自定义地图排序

我有一张地图如

m=[
     "james":"silly boy",
     "janny":"Crazy girl",
     "jimmy":"funny man",
     "georges":"massive fella"
];
Run Code Online (Sandbox Code Playgroud)

我希望按其值排序此映射但忽略大小写(这就是为什么需要自定义排序).因此我想我必须使用闭包实现自定义排序.但我是Groovy的新手,并且一直在努力完成这个非常简单的任务!

期望的结果将是:

["janny":"Crazy girl", "jimmy":"funny man", "georges":"massive fella", "james":"silly boy"]
Run Code Online (Sandbox Code Playgroud)

谢谢 !

sorting groovy map

13
推荐指数
4
解决办法
2万
查看次数

Python中的惰性映射函数

有没有办法做map懒惰?或者是否内置了Python的另一个实现?

我想要这样的东西工作:

from itertools import count

for x in map(lambda x: x**2, count()):
    print x
Run Code Online (Sandbox Code Playgroud)

当然,上面的代码不会结束,但我想在其中输入任何条件(或更复杂的逻辑)for并在某些时候停止.

python iterator map lazy-evaluation

13
推荐指数
1
解决办法
8218
查看次数

如何在不覆盖当前条目的情况下添加多个Groovy映射条目?

我对Groovy Maps的问题.我一直在寻找一种方法,以编程方式将新条目添加到Groovy映射而不覆盖当前条目.例如

def editsMap = [:]

lineEdits.flag.each 
{ lineEdits_Flag ->
   editsMap.put('FlagId',lineEdits_Flag.id)
   editsMap.put('FlagMnemonic',lineEdits_Flag.mnemonic)
   editsMap.put('Action',lineEdits_Flag.action)   
   println "editsMap: ${editsMap}"
}
Run Code Online (Sandbox Code Playgroud)

第一遍产生这个地图:
editsMap:[FlagId:10001,FlagMnemonic:TRA,Action:review]

但第二遍用:editsMap覆盖第一遍:[FlagId:10002,FlagMnemonic:REB,Action:deny]

我要做的是在一个地图中创建多个条目.我需要我的地图填充这样的东西:

editsMap: [FlagId:10001, FlagMnemonic:TRA, Action:review]
editsMap: [FlagId:10002, FlagMnemonic:REB, Action:deny]
editsMap: [FlagId:10003, FlagMnemonic:UNB, Action:deny]
editsMap: [FlagId:20001, FlagMnemonic:REB, Action:deny]
editsMap: [FlagId:20002, FlagMnemonic:ICD, Action:review]
editsMap: [FlagId:30001, FlagMnemonic:REB, Action:deny]
editsMap: [FlagId:40001, FlagMnemonic:ICD, Action:review]
editsMap: [FlagId:40002, FlagMnemonic:MPR, Action:review]
editsMap: [FlagId:50001, FlagMnemonic:CPT, Action:deny]
editsMap: [FlagId:60001, FlagMnemonic:DTU, Action:deny]
editsMap: [FlagId:70001, FlagMnemonic:ICD, Action:review]
editsMap: [FlagId:70002, FlagMnemonic:MPR, Action:review]
Run Code Online (Sandbox Code Playgroud)

一旦我填充了我的地图,我就需要能够找到某些值来处理消息.我相信我可以使用类似的东西:

def thisValue = appliedEditsMap[FlagId, '10001'] ?: "default"
Run Code Online (Sandbox Code Playgroud)

快速查找.

有人可以帮助我了解如何以编程方式将值添加到Groovy地图而不覆盖地图中已有的值吗?

groovy map

13
推荐指数
4
解决办法
3万
查看次数