Untitled
unknown
plain_text
2 years ago
1.8 kB
6
Indexable
#include <unordered_map> #include <string> #include <vector> using namespace std; #define MAX_N 5 #define SIZE 50009 #define MAX_NAME_LEN 7 #define MAX_TAG_LEN 4 //void mstrcpy(char dst[], const char src[]) { // int c = 0; // while ((dst[c] = src[c]) != '\0') ++c; //} //int mstrcmp(const char str1[], const char str2[]) { // int c = 0; // while (str1[c] != '\0' && str1[c] == str2[c]) ++c; // return str1[c] - str2[c]; //} struct Book{ int section; bool isDel; }; unordered_map<string, int> bookMap; unordered_map<string, vector<int>> typeMap; int idx, flag; Book data[SIZE]; int bookCount[SIZE]; void init(int M) { flag = 0; idx = 0; for(int i = 0; i < SIZE; i++){ bookCount[i] = 0; } bookMap.clear(); typeMap.clear(); } void add(char mName[MAX_NAME_LEN], int mTypeNum, char mTypes[MAX_N][MAX_TAG_LEN], int mSection) { bookMap[mName] = idx; data[idx].section = mSection; data[idx].isDel = false; for(int i = 0; i < mTypeNum; i++){ typeMap[mTypes[i]].push_back(idx); } idx++; } int moveType(char mType[MAX_TAG_LEN], int mFrom, int mTo) { int cnt = 0; for(auto it : typeMap[mType]){ if(data[it].section == mFrom && data[it].isDel == false){ data[it].section = mTo; cnt++; } } return cnt; } void moveName(char mName[MAX_NAME_LEN], int mSection) { data[bookMap[mName]].section = mSection; } void deleteName(char mName[MAX_NAME_LEN]) { data[bookMap[mName]].isDel = true; } int countBook(int mTypeNum, char mTypes[MAX_N][MAX_TAG_LEN], int mSection) { flag = flag + 1; int cnt = 0; for(int i = 0; i < mTypeNum; i++){ for(auto it : typeMap[mTypes[i]]){ if(data[it].section == mSection && data[it].isDel == false && bookCount[it] != flag){ bookCount[it] = flag; cnt++; } } } return cnt; }
Editor is loading...