1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <vector> #include <map> #include <string> #include <cfloat> #include <iostream> using namespace std; typedef vector<float> componenttype; typedef vector<float> datatype; typedef map<string, int> possiblenames; typedef vector<pair<componenttype, string>> resulttype; float vecdistance(datatype v1, componenttype v2) {return 1.0;} resulttype user995434(vector<datatype> data, vector<string> labels, vector<componenttype> components) { map<componenttype, possiblenames> maybenames; resulttype resultnames; //for each data d from data for(auto d=data.begin(); d!=data.end(); ++d) { //let c the nearest component from d according to distance. auto closest=components.begin(); float closedistance = FLT_MAX; for(auto it=components.begin(); it!=components.end(); ++it) { float dist = vecdistance(*d, *it); if (dist < closedistance) { closedistance = dist; closest = it; } } //associate the label of d to c. int offset = std::distance(data.begin(), d); maybenames[*closest][labels[offset]]++; } //for each component c for(auto c=components.begin(); c!=components.end(); ++c) { //let mostname be the name with the most matches. auto posnames = maybenames[*c]; posnames[""]=0; //guarantee each component has _something_ auto mostname = posnames.begin(); for(auto it=posnames.begin(); it!=posnames.end(); ++it) { if (it->second > mostname->second) mostname = it; } //associate mostname with c resultnames.push_back(make_pair(*c, mostname->first)); } return resultnames; } int main() { vector<componenttype> components(1, vector<float>(1, 1.5f)); vector<datatype> data(1, vector<float>(1, 1.5f)); vector<string> labels(1, string("APPLE")); resulttype names = user995434(data, labels, components); for(auto it=names.begin(); it!=names.end(); ++it) { std::cout << "{"; for(auto it2=it->first.begin(); it2!=it->first.end(); ++it2) std::cout << *it2 << ","; std::cout << "} = " << it->second << '\n'; } return 0; } |
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNmbG9hdD4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCnR5cGVkZWYgdmVjdG9yPGZsb2F0PiBjb21wb25lbnR0eXBlOwp0eXBlZGVmIHZlY3RvcjxmbG9hdD4gZGF0YXR5cGU7CnR5cGVkZWYgbWFwPHN0cmluZywgaW50PiBwb3NzaWJsZW5hbWVzOwp0eXBlZGVmIHZlY3RvcjxwYWlyPGNvbXBvbmVudHR5cGUsIHN0cmluZz4+IHJlc3VsdHR5cGU7CgpmbG9hdCB2ZWNkaXN0YW5jZShkYXRhdHlwZSB2MSwgY29tcG9uZW50dHlwZSB2Mikge3JldHVybiAxLjA7fQoKcmVzdWx0dHlwZSB1c2VyOTk1NDM0KHZlY3RvcjxkYXRhdHlwZT4gZGF0YSwgdmVjdG9yPHN0cmluZz4gbGFiZWxzLCB2ZWN0b3I8Y29tcG9uZW50dHlwZT4gY29tcG9uZW50cykgewogICAgbWFwPGNvbXBvbmVudHR5cGUsIHBvc3NpYmxlbmFtZXM+IG1heWJlbmFtZXM7CiAgICByZXN1bHR0eXBlIHJlc3VsdG5hbWVzOwogICAgCiAgICAvL2ZvciBlYWNoIGRhdGEgZCBmcm9tIGRhdGEKICAgIGZvcihhdXRvIGQ9ZGF0YS5iZWdpbigpOyBkIT1kYXRhLmVuZCgpOyArK2QpIHsKICAgICAgIC8vbGV0IGMgdGhlIG5lYXJlc3QgY29tcG9uZW50IGZyb20gZCBhY2NvcmRpbmcgdG8gZGlzdGFuY2UuCiAgICAgICBhdXRvIGNsb3Nlc3Q9Y29tcG9uZW50cy5iZWdpbigpOwogICAgICAgZmxvYXQgY2xvc2VkaXN0YW5jZSA9IEZMVF9NQVg7CiAgICAgICBmb3IoYXV0byBpdD1jb21wb25lbnRzLmJlZ2luKCk7IGl0IT1jb21wb25lbnRzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgZmxvYXQgZGlzdCA9IHZlY2Rpc3RhbmNlKCpkLCAqaXQpOwogICAgICAgICAgIGlmIChkaXN0IDwgY2xvc2VkaXN0YW5jZSkgewogICAgICAgICAgICAgICBjbG9zZWRpc3RhbmNlID0gZGlzdDsgCiAgICAgICAgICAgICAgIGNsb3Nlc3QgPSBpdDsKICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vYXNzb2NpYXRlIHRoZSBsYWJlbCBvZiBkIHRvIGMuCiAgICAgICAgaW50IG9mZnNldCA9IHN0ZDo6ZGlzdGFuY2UoZGF0YS5iZWdpbigpLCBkKTsKICAgICAgICBtYXliZW5hbWVzWypjbG9zZXN0XVtsYWJlbHNbb2Zmc2V0XV0rKzsKICAgIH0KICAgIC8vZm9yIGVhY2ggY29tcG9uZW50IGMKICAgIGZvcihhdXRvIGM9Y29tcG9uZW50cy5iZWdpbigpOyBjIT1jb21wb25lbnRzLmVuZCgpOyArK2MpIHsKICAgICAgICAvL2xldCBtb3N0bmFtZSBiZSB0aGUgbmFtZSB3aXRoIHRoZSBtb3N0IG1hdGNoZXMuCiAgICAgICAgYXV0byBwb3NuYW1lcyA9IG1heWJlbmFtZXNbKmNdOwogICAgICAgIHBvc25hbWVzWyIiXT0wOyAvL2d1YXJhbnRlZSBlYWNoIGNvbXBvbmVudCBoYXMgX3NvbWV0aGluZ18KICAgICAgICBhdXRvIG1vc3RuYW1lID0gcG9zbmFtZXMuYmVnaW4oKTsKICAgICAgICBmb3IoYXV0byBpdD1wb3NuYW1lcy5iZWdpbigpOyBpdCE9cG9zbmFtZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQgPiBtb3N0bmFtZS0+c2Vjb25kKQogICAgICAgICAgICAgICAgbW9zdG5hbWUgPSBpdDsKICAgICAgICB9CiAgICAgICAgLy9hc3NvY2lhdGUgbW9zdG5hbWUgd2l0aCBjCiAgICAgICAgcmVzdWx0bmFtZXMucHVzaF9iYWNrKG1ha2VfcGFpcigqYywgbW9zdG5hbWUtPmZpcnN0KSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0bmFtZXM7Cn0KCmludCBtYWluKCkgewogICAgdmVjdG9yPGNvbXBvbmVudHR5cGU+IGNvbXBvbmVudHMoMSwgdmVjdG9yPGZsb2F0PigxLCAxLjVmKSk7CiAgICB2ZWN0b3I8ZGF0YXR5cGU+IGRhdGEoMSwgdmVjdG9yPGZsb2F0PigxLCAxLjVmKSk7CiAgICB2ZWN0b3I8c3RyaW5nPiBsYWJlbHMoMSwgc3RyaW5nKCJBUFBMRSIpKTsKICAgIHJlc3VsdHR5cGUgbmFtZXMgPSB1c2VyOTk1NDM0KGRhdGEsIGxhYmVscywgY29tcG9uZW50cyk7CiAgICBmb3IoYXV0byBpdD1uYW1lcy5iZWdpbigpOyBpdCE9bmFtZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgInsiOwogICAgICAgIGZvcihhdXRvIGl0Mj1pdC0+Zmlyc3QuYmVnaW4oKTsgaXQyIT1pdC0+Zmlyc3QuZW5kKCk7ICsraXQyKQogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgKml0MiA8PCAiLCI7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJ9ID0gIiA8PCBpdC0+c2Vjb25kIDw8ICdcbic7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==
-
upload with new input
-
result: Success time: 0s memory: 3032 kB returned value: 0
{1.5,} = APPLE


