大家好,我在成员函数中有以下内容
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)
但没有骰子......仍然是同样的错误.
我找不到如何做到这一点的实例,所以我希望有人可以帮助我.我在类中定义了如下地图:
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错误的删除事件代码.现在修复了.
我们假设我有两个类: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)
如何获取源和目标表达式?
我的代码审查员已经指出地图的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作为我的内部容器,因为我想使用它快速且自我解释的索引功能.
我希望有人可以和我争论更多或站在我身边:)
我有以下地图列表
({"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)
我该怎么做?
我使用这样的东西:
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()返回的任何信息.
我需要创建一个静态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
常量String
和int
值使用常量.
编辑:为了阐明我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) 我有一张地图如
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)
谢谢 !
有没有办法做map
懒惰?或者是否内置了Python的另一个实现?
我想要这样的东西工作:
from itertools import count
for x in map(lambda x: x**2, count()):
print x
Run Code Online (Sandbox Code Playgroud)
当然,上面的代码不会结束,但我想在其中输入任何条件(或更复杂的逻辑)for
并在某些时候停止.
我对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地图而不覆盖地图中已有的值吗?