Я думаю, что вы теряете контекст i
. Вы можете объявить переменную i с помощью let
вместо var
. Или все еще используя ES5, оборачивая i
в замыкание (поэтому i
не изменит свое значение):
function openSubNavs2()
{
var allToggleBs = document.querySelector('ul#nav').getElementsByTagName('b');
for (var i=0; i<allToggleBs.length; i++)
{
(function(i) {
var toggleB = allToggleBs[i];
toggleB.addEventListener('click', function()
{
toggleB.className = 'show';
});
})(i);
}
}
window.addEventListener('load', function() {openSubNavs2();});
CMap<CString,LPCTSTR, struct_sample,struct_sample> myMap;
struct_sample aTest;
aTest.a = 1;
aTest.b = 2;
aTest.c = 3;
myMap.SetAt("test",aTest);
...
struct_sample aLookupTest;
BOOL bExists = myMap.Lookup("test",aLookupTest); //Retrieves the
//struct_sample corresponding to "test".
Пример из MDSN для получения дополнительных сведений о CMap.
Если вы хотите придерживаться MFC, воспользуйтесь ответом aJ.
В противном случае вам лучше использовать стандартную карту библиотеки. Обязательно проверьте его документацию - здесь есть чему поучиться. Обычно я использую http://www.sgi.com/tech/stl/table_of_contents.html .
#include <map>
#include <string>
#include <utility> // for make_pair
using namespace std;
int main() {
std::map< string, struct_sample > myMap;
const struct_sample aTest = { 1,2,3 };
myMap.insert(make_pair( "test", aTest ) );
myMap[ "test2" ] = aTest; // does a default construction of the mapped struct, first => little slower than the map::insert
const map<string, struct_sample >::const_iterator aLookupTest = myMap.find( "test" );
const bool bExists = aLookupTest != myMap.end();
aLookupTest->second.a = 10;
myMap[ "test" ].b = 20;
}
Примечание: использование typedef для шаблонов может сделать код более читабельным.