2017-03-20 65 views
0

我已经创建了一个wstring作为数据结构键的映射,但是当我试图运行迭代器来显示地图数据时,它跳过了我添加的第一个数据。这是代码。将数据存储到地图

typedef struct 
{ 
public: 
wstring source; 
wstring synthetic; 
int operation; 
int divisor; 
}SSParams; 

map<wstring, SSParams>SSParameters; 

for(int x=0;x<sizeofdata;x++) 
{ 
SSParameters[srcsymbol[x]].source = srcsymbol[x]; 
SSParameters[srcsymbol[x]].synthetic = synsymbol[x]; 
SSParameters[srcsymbol[x]].operation = operation[x]; 
SSParameters[srcsymbol[x]].divisor = divisor[x]; 
m_api->LoggerOut(Log, L"Source: %s Synth: %s, Operation: %d, Value: %d, Total: %d", SSParameters[srcsymbol].source, SSParameters[srcsymbol].synthetic, SSParameters[srcsymbol].operation, SSParameters[srcsymbol].divisor,SSParameters.size()); 
} 

map<wstring, SSParams>::iterator iter; 
for (iter = SSParameters.begin(); iter != SSParameters.end(); ++iter) 
{ 
    m_api->LoggerOut(Log, L"Data Source: %s, Synth: %s, Operation: %d, Divisor: %d", iter->second.source, iter->second.synthetic, iter->second.operation, iter->second.divisor); 
} 

输出(插入环):

Source: HCBC Synth: HCBCx, Operation:1, Value: 100, Total: 1 
Source: HCBC Synth: HCBCv, Operation:1, Value: 100, Total: 1 

输出(迭代循环):

Data Source: HCBC Synth: HCBCv, Operation:1, Value: 100 

正如你可以看到,我使用的附加价值以及密钥到地图for循环和日志显示我已成功添加数据,但是当我尝试运行迭代器时,我显示数据但跳过第一个。

+0

尝试阅读本文,它在这种情况下确实有帮助:https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – alexeykuzmin0

+0

您还应该提供示例输入,预期输出和实际产量。 –

+0

我认为这个问题只是在地图上添加了一个元素,因为变量“srcsymbol”似乎没有变化 –

回答

1

可以测试被插入键唯一使用:

for(int x=0;x<sizeofdata;x++) 
{ 
    assert(SSParameters.count(srcsymbol[x])==0); 
    SSParameters[srcsymbol[x]].source = srcsymbol[x]; 

要求<cassert>

+0

你说地图上的按键应该是唯一的吗? – Raven

+0

当然他们应该。地图将唯一键映射到值。如果密钥不唯一,则只需覆盖现有条目。如果这不是你想要的行为,那么你应该使用不同的容器。 –

+0

是的,'map'中的键总是唯一的,如果你重用一个键,与该键关联的旧值将被覆盖。 – sp2danny

1

由于srcsymbol不会在循环中更改,因此您只需添加一个元素,然后不断覆盖其内容。最终结果;该地图只包含一个元素。

+0

对不起,但每个循环srcsymbol有不同的值 – Raven

+1

也许现在你已经把它改成了'srcsymbol [x]'。以前,它没有。 –

+0

@Raven也许你应该打印srcsymbol [x]以确保它们有不同的值 –

0

从插入环路的输出,srcsymbol [X]总是等于HCBC。因此,该程序仅向地图添加了一个元素。