c++ -o main main.cc -std=c++11 -O0 -g && ./main
** Integer Keys **
unordered: 250 74
ordered: 475 238
** Random String Keys **
unordered: 104 98
ordered: 85 82
** Real Words Keys **
unordered: 225 100
ordered: 503 277
Created
October 24, 2023 09:16
-
-
Save CandyMi/bef24e7bed413ad87a4d6b0b7761aca5 to your computer and use it in GitHub Desktop.
Map vs Unordered_map
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <map> | |
| #include <tuple> | |
| #include <chrono> | |
| #include <vector> | |
| #include <string> | |
| #include <cstdlib> | |
| #include <fstream> | |
| #include <iomanip> | |
| #include <assert.h> | |
| #include <iostream> | |
| #include <unordered_map> | |
| using namespace std ; | |
| typedef chrono::time_point<chrono::system_clock> SystemTime ; | |
| template <typename HashType, typename KeyType> tuple <int, int, int> hash_test(vector <KeyType> &keys) | |
| { | |
| int count(0); | |
| int insertTime(0), fetchTime(0) ; | |
| { | |
| HashType hash ; | |
| { | |
| SystemTime start(chrono::system_clock::now()); | |
| for(KeyType &t : keys) | |
| hash [t] = 1; | |
| SystemTime end(chrono::system_clock::now()); | |
| insertTime = chrono::duration_cast<chrono::microseconds>(end-start).count(); | |
| } | |
| { | |
| SystemTime start(chrono::system_clock::now()); | |
| for(KeyType &t : keys) | |
| count += hash [t]; | |
| SystemTime end(chrono::system_clock::now()); | |
| fetchTime = chrono::duration_cast<chrono::microseconds>(end-start).count(); | |
| } | |
| } | |
| //count is used to ensure that the compiler optimisations don't remove the hashing operations | |
| return tuple <int, int, int>(insertTime, fetchTime, count); | |
| } | |
| template <typename Key> void maptest(const char *context, vector <Key> &keys) | |
| { | |
| auto uMapTimes = hash_test<unordered_map <Key, int>, Key>(keys); | |
| auto oMapTimes = hash_test<map <Key, int>, Key>(keys); | |
| cout<<context<<endl; | |
| cout<<setw(12)<<"unordered: "<<setw(8)<<get<0>(uMapTimes)<<setw(8)<<get<1>(uMapTimes)<<endl; | |
| cout<<setw(12)<<"ordered: " <<setw(8)<<get<0>(oMapTimes)<<setw(8)<<get<1>(oMapTimes)<<endl; | |
| } | |
| int main() | |
| { | |
| std::srand(time(0)); | |
| enum { KeyCount=1024, MinStrSize=8, MaxStrSize=16 } ; | |
| vector <int> integerKeys(KeyCount); | |
| for(int i=0; i<KeyCount; i++) | |
| integerKeys [i] = i ; | |
| vector <string> randomStrings(KeyCount) ; | |
| for(int i=0; i<KeyCount; i++) | |
| { | |
| auto &str = randomStrings[i] ; | |
| str.resize(((MaxStrSize-MinStrSize)%std::rand()) + MinStrSize); | |
| for(char &c : str) | |
| { | |
| c = (('z' - 'a')%std::rand()) + 'a' ; | |
| } | |
| } | |
| //wordlist can be downloaded here: http://pastebin.com/yt3s22hf | |
| vector <string> wordKeys ; | |
| ifstream input("wordlist.txt"); | |
| assert(input.good()); | |
| while(!input.eof()) | |
| { | |
| string s ; | |
| input >> s ; | |
| wordKeys.push_back(s); | |
| } | |
| input.close(); | |
| maptest<int>(" ** Integer Keys ** ", integerKeys); | |
| maptest<string>(" ** Random String Keys ** ", randomStrings); | |
| maptest<string>(" ** Real Words Keys ** ", wordKeys); | |
| return 0 ; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| a | |
| able | |
| about | |
| account | |
| acid | |
| across | |
| act | |
| addition | |
| adjustment | |
| advertisement | |
| after | |
| again | |
| against | |
| agreement | |
| air | |
| all | |
| almost | |
| among | |
| amount | |
| amusement | |
| and | |
| angle | |
| angry | |
| animal | |
| answer | |
| ant | |
| any | |
| apparatus | |
| apple | |
| approval | |
| arch | |
| argument | |
| arm | |
| army | |
| art | |
| as | |
| at | |
| attack | |
| attempt | |
| attention | |
| attraction | |
| authority | |
| automatic | |
| awake | |
| baby | |
| back | |
| bad | |
| bag | |
| balance | |
| ball | |
| band | |
| base | |
| basin | |
| basket | |
| bath | |
| be | |
| beautiful | |
| because | |
| bed | |
| bee | |
| before | |
| behaviour | |
| belief | |
| bell | |
| bent | |
| berry | |
| between | |
| bird | |
| birth | |
| bit | |
| bite | |
| bitter | |
| black | |
| blade | |
| blood | |
| blow | |
| blue | |
| board | |
| boat | |
| body | |
| boiling | |
| bone | |
| book | |
| boot | |
| bottle | |
| box | |
| boy | |
| brain | |
| brake | |
| branch | |
| brass | |
| bread | |
| breath | |
| brick | |
| bridge | |
| bright | |
| broken | |
| brother | |
| brown | |
| brush | |
| bucket | |
| building | |
| bulb | |
| burn | |
| burst | |
| business | |
| but | |
| butter | |
| button | |
| by | |
| cake | |
| camera | |
| canvas | |
| card | |
| care | |
| carriage | |
| cart | |
| cat | |
| cause | |
| certain | |
| chain | |
| chalk | |
| chance | |
| change | |
| cheap | |
| cheese | |
| chemical | |
| chest | |
| chief | |
| chin | |
| church | |
| circle | |
| clean | |
| clear | |
| clock | |
| cloth | |
| cloud | |
| coal | |
| coat | |
| cold | |
| collar | |
| colour | |
| comb | |
| come | |
| comfort | |
| committee | |
| common | |
| company | |
| comparison | |
| competition | |
| complete | |
| complex | |
| condition | |
| connection | |
| conscious | |
| control | |
| cook | |
| copper | |
| copy | |
| cord | |
| cork | |
| cotton | |
| cough | |
| country | |
| cover | |
| cow | |
| crack | |
| credit | |
| crime | |
| cruel | |
| crush | |
| cry | |
| cup | |
| cup | |
| current | |
| curtain | |
| curve | |
| cushion | |
| damage | |
| danger | |
| dark | |
| daughter | |
| day | |
| dead | |
| dear | |
| death | |
| debt | |
| decision | |
| deep | |
| degree | |
| delicate | |
| dependent | |
| design | |
| desire | |
| destruction | |
| detail | |
| development | |
| different | |
| digestion | |
| direction | |
| dirty | |
| discovery | |
| discussion | |
| disease | |
| disgust | |
| distance | |
| distribution | |
| division | |
| do | |
| dog | |
| door | |
| doubt | |
| down | |
| drain | |
| drawer | |
| dress | |
| drink | |
| driving | |
| drop | |
| dry | |
| dust | |
| ear | |
| early | |
| earth | |
| east | |
| edge | |
| education | |
| effect | |
| egg | |
| elastic | |
| electric | |
| end | |
| engine | |
| enough | |
| equal | |
| error | |
| even | |
| event | |
| ever | |
| every | |
| example | |
| exchange | |
| existence | |
| expansion | |
| experience | |
| expert | |
| eye | |
| face | |
| fact | |
| fall | |
| false | |
| family | |
| far | |
| farm | |
| fat | |
| father | |
| fear | |
| feather | |
| feeble | |
| feeling | |
| female | |
| fertile | |
| fiction | |
| field | |
| fight | |
| finger | |
| fire | |
| first | |
| fish | |
| fixed | |
| flag | |
| flame | |
| flat | |
| flight | |
| floor | |
| flower | |
| fly | |
| fold | |
| food | |
| foolish | |
| foot | |
| for | |
| force | |
| fork | |
| form | |
| forward | |
| fowl | |
| frame | |
| free | |
| frequent | |
| friend | |
| from | |
| front | |
| fruit | |
| full | |
| future | |
| garden | |
| general | |
| get | |
| girl | |
| give | |
| glass | |
| glove | |
| go | |
| goat | |
| gold | |
| good | |
| government | |
| grain | |
| grass | |
| great | |
| green | |
| grey | |
| grip | |
| group | |
| growth | |
| guide | |
| gun | |
| hair | |
| hammer | |
| hand | |
| hanging | |
| happy | |
| harbour | |
| hard | |
| harmony | |
| hat | |
| hate | |
| have | |
| he | |
| head | |
| healthy | |
| hear | |
| hearing | |
| heart | |
| heat | |
| help | |
| high | |
| history | |
| hole | |
| hollow | |
| hook | |
| hope | |
| horn | |
| horse | |
| hospital | |
| hour | |
| house | |
| how | |
| humour | |
| I | |
| ice | |
| idea | |
| if | |
| ill | |
| important | |
| impulse | |
| in | |
| increase | |
| industry | |
| ink | |
| insect | |
| instrument | |
| insurance | |
| interest | |
| invention | |
| iron | |
| island | |
| jelly | |
| jewel | |
| join | |
| journey | |
| judge | |
| jump | |
| keep | |
| kettle | |
| key | |
| kick | |
| kind | |
| kiss | |
| knee | |
| knife | |
| knot | |
| knowledge | |
| land | |
| language | |
| last | |
| late | |
| laugh | |
| law | |
| lead | |
| leaf | |
| learning | |
| leather | |
| left | |
| leg | |
| let | |
| letter | |
| level | |
| library | |
| lift | |
| light | |
| like | |
| limit | |
| line | |
| linen | |
| lip | |
| liquid | |
| list | |
| little | |
| living | |
| lock | |
| long | |
| look | |
| loose | |
| loss | |
| loud | |
| love | |
| low | |
| machine | |
| make | |
| male | |
| man | |
| manager | |
| map | |
| mark | |
| market | |
| married | |
| mass | |
| match | |
| material | |
| may | |
| meal | |
| measure | |
| meat | |
| medical | |
| meeting | |
| memory | |
| metal | |
| middle | |
| military | |
| milk | |
| mind | |
| mine | |
| minute | |
| mist | |
| mixed | |
| money | |
| monkey | |
| month | |
| moon | |
| morning | |
| mother | |
| motion | |
| mountain | |
| mouth | |
| move | |
| much | |
| muscle | |
| music | |
| nail | |
| name | |
| narrow | |
| nation | |
| natural | |
| near | |
| necessary | |
| neck | |
| need | |
| needle | |
| nerve | |
| net | |
| new | |
| news | |
| night | |
| no | |
| noise | |
| normal | |
| north | |
| nose | |
| not | |
| note | |
| now | |
| number | |
| nut | |
| observation | |
| of | |
| off | |
| offer | |
| office | |
| oil | |
| old | |
| on | |
| only | |
| open | |
| operation | |
| opinion | |
| opposite | |
| or | |
| orange | |
| order | |
| organization | |
| ornament | |
| other | |
| out | |
| oven | |
| over | |
| owner | |
| page | |
| pain | |
| paint | |
| paper | |
| parallel | |
| parcel | |
| part | |
| past | |
| paste | |
| payment | |
| peace | |
| pen | |
| pencil | |
| person | |
| physical | |
| picture | |
| pig | |
| pin | |
| pipe | |
| place | |
| plane | |
| plant | |
| plate | |
| play | |
| please | |
| pleasure | |
| plough | |
| point | |
| poison | |
| polish | |
| political | |
| poor | |
| porter | |
| position | |
| possible | |
| pot | |
| potato | |
| powder | |
| power | |
| present | |
| price | |
| prison | |
| private | |
| probable | |
| process | |
| produce | |
| profit | |
| property | |
| prose | |
| protest | |
| public | |
| pull | |
| pump | |
| punishment | |
| purpose | |
| push | |
| put | |
| quality | |
| question | |
| quick | |
| quiet | |
| quite | |
| rail | |
| rain | |
| range | |
| rat | |
| rate | |
| ray | |
| reaction | |
| reading | |
| ready | |
| reason | |
| receipt | |
| record | |
| red | |
| regret | |
| regular | |
| relation | |
| religion | |
| representative | |
| request | |
| respect | |
| responsible | |
| rest | |
| reward | |
| rhythm | |
| rice | |
| right | |
| ring | |
| river | |
| road | |
| rod | |
| roll | |
| roof | |
| room | |
| root | |
| rough | |
| round | |
| rub | |
| rule | |
| run | |
| sad | |
| safe | |
| sail | |
| salt | |
| same | |
| sand | |
| say | |
| scale | |
| school | |
| science | |
| scissors | |
| screw | |
| sea | |
| seat | |
| second | |
| secret | |
| secretary | |
| see | |
| seed | |
| seem | |
| selection | |
| self | |
| send | |
| sense | |
| separate | |
| serious | |
| servant | |
| sex | |
| shade | |
| shake | |
| shame | |
| sharp | |
| sheep | |
| shelf | |
| ship | |
| shirt | |
| shock | |
| shoe | |
| short | |
| shut | |
| side | |
| sign | |
| silk | |
| silver | |
| simple | |
| sister | |
| size | |
| skin | |
| skirt | |
| sky | |
| sleep | |
| slip | |
| slope | |
| slow | |
| small | |
| smash | |
| smell | |
| smile | |
| smoke | |
| smooth | |
| snake | |
| sneeze | |
| snow | |
| so | |
| soap | |
| society | |
| sock | |
| soft | |
| solid | |
| some | |
| son | |
| song | |
| sort | |
| sound | |
| soup | |
| south | |
| space | |
| spade | |
| special | |
| sponge | |
| spoon | |
| spring | |
| square | |
| stage | |
| stamp | |
| star | |
| start | |
| statement | |
| station | |
| steam | |
| steel | |
| stem | |
| step | |
| stick | |
| sticky | |
| stiff | |
| still | |
| stitch | |
| stocking | |
| stomach | |
| stone | |
| stop | |
| store | |
| story | |
| straight | |
| strange | |
| street | |
| stretch | |
| strong | |
| structure | |
| substance | |
| such | |
| sudden | |
| sugar | |
| suggestion | |
| summer | |
| sun | |
| support | |
| surprise | |
| sweet | |
| swim | |
| system | |
| table | |
| tail | |
| take | |
| talk | |
| tall | |
| taste | |
| tax | |
| teaching | |
| tendency | |
| test | |
| than | |
| that | |
| the | |
| then | |
| theory | |
| there | |
| thick | |
| thin | |
| thing | |
| this | |
| thought | |
| thread | |
| throat | |
| through | |
| through | |
| thumb | |
| thunder | |
| ticket | |
| tight | |
| till | |
| time | |
| tin | |
| tired | |
| to | |
| toe | |
| together | |
| tomorrow | |
| tongue | |
| tooth | |
| top | |
| touch | |
| town | |
| trade | |
| train | |
| transport | |
| tray | |
| tree | |
| trick | |
| trouble | |
| trousers | |
| true | |
| turn | |
| twist | |
| umbrella | |
| under | |
| unit | |
| up | |
| use | |
| value | |
| verse | |
| very | |
| vessel | |
| view | |
| violent | |
| voice | |
| waiting | |
| walk | |
| wall | |
| war | |
| warm | |
| wash | |
| waste | |
| watch | |
| water | |
| wave | |
| wax | |
| way | |
| weather | |
| week | |
| weight | |
| well | |
| west | |
| wet | |
| wheel | |
| when | |
| where | |
| while | |
| whip | |
| whistle | |
| white | |
| who | |
| why | |
| wide | |
| will | |
| wind | |
| window | |
| wine | |
| wing | |
| winter | |
| wire | |
| wise | |
| with | |
| woman | |
| wood | |
| wool | |
| word | |
| work | |
| worm | |
| wound | |
| writing | |
| wrong | |
| year | |
| yellow | |
| yes | |
| yesterday | |
| you | |
| young |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment