What I did is use the at method where the index for F comes from an "untrusted" source (in very indirect ways from a map). Try this:
Code:
#include <iostream>
#include <vector>
#include <map>
#include <exception>
using namespace std;
int main(){
try {
vector<vector<float> > kF;
vector<float> F;
map <int, string> namesmap;
namesmap[1] = "one";
namesmap[2] = "two";
namesmap[3] = "three";
namesmap[4] = "four";
vector<map<string,int> > kFmap;
kFmap.resize(2);
kFmap[0][namesmap[1]] = 5;
kFmap[0][namesmap[2]] = 10;
kFmap[0][namesmap[3]] = 5;
kFmap[0][namesmap[4]] = 20;
kFmap[1][namesmap[1]] = 5;
kFmap[1][namesmap[2]] = 5;
kFmap[1][namesmap[3]] = 5;
kFmap[1][namesmap[4]] = 20;
for (unsigned int k = 0; k < 2; k++){
cout << "k = " << k << endl;
F.resize(6);
for (int i = 1; i <= 4; i++){
F.at(kFmap[k][namesmap[i]])++;
}
for (int i = 1; i <= 4; i++){
cout << kFmap[k][namesmap[i]] << " kFmap | ";
cout << F.at(kFmap[k][namesmap[i]]) << " | ";
F.at(kFmap[k][namesmap[i]]) /= (10); //bug
cout << F.at(kFmap[k][namesmap[i]]) << " | ";
cout << endl;
} cout << endl;
kF.push_back(F);
F.clear();
}
}
catch (exception& e) {
cout << e.what() << '\n';
}
return 0;
}