예제 #1
0
int main(int argc, char **argv)
{
    if (argc < 2) {
        fprintf(stderr, "Usage:\n");
        fprintf(stderr, "create_discodb discodb.out input.txt\n");
        fprintf(stderr, "where input.txt contain a key-value pair on each line, devided by space.\n");
        exit(1);
    }

    FILE *in;
    FILE *out;
    uint64_t size;
    char *data;
    struct ddb_cons *db = ddb_cons_new();
    uint64_t flags = 0;

    flags |= getenv("DONT_COMPRESS") ? DDB_OPT_DISABLE_COMPRESSION: 0;
    flags |= getenv("UNIQUE_ITEMS") ? DDB_OPT_UNIQUE_ITEMS: 0;

    if (!db) {
        fprintf(stderr, "DB init failed\n");
        exit(1);
    }

    if (!(in = fopen(argv[2], "r"))) {
        fprintf(stderr, "Couldn't open %s\n", argv[2]);
        exit(1);
    }
    if (getenv("KEYS_ONLY"))
        read_keys(in, db);
    else
        read_pairs(in, db);

    fprintf(stderr, "Packing the index..\n");

    if (!(data = ddb_finalize(db, &size, flags))) {
        fprintf(stderr, "Packing the index failed\n");
        exit(1);
    }
    ddb_cons_free(db);

    if (!(out = fopen(argv[1], "w"))) {
        fprintf(stderr, "Opening file %s failed\n", argv[1]);
        exit(1);
    }
    if (!fwrite(data, size, 1, out)) {
        fprintf(stderr, "Writing file %s failed\n", argv[1]);
        exit(1);
    }
    fclose(out);

    free(data);
    fprintf(stderr, "Ok! Index written to %s\n", argv[1]);
    return 0;
}
int main() try {
	vector<string> names;
	vector<int> ages;

	read_pairs(names, ages);
	vector<string> names_copy = names;

	sort(names.begin(),names.end());
	
	for (int i = 0; i < names.size(); i++) {
		cout << names[i] << " : " << ages[find_index(names, names_copy, i)] << endl;

	}
}
// Error processing
catch (runtime_error& e) {
	cerr << e.what() << "\n";
}
catch (...) {
	cerr << "Unknown exception\n";
}