Comments (6)
Haven't tested, but I think you can use std::unordered_map instead of std::map in the object typedef json11.hpp
from json11.
Doing that would avoid the alphabetical sort, but wouldn't preserve insertion order as you mention. Hashes have an undefined iteration order. If you want both fast lookup, and insertion-order iteration, you need a hybrid structure like a linked hash (http://www.drdobbs.com/cpp/an-stl-compatible-hybrid-of-linked-list/184406207). STL doesn't include such a datastructure.
from json11.
Thank you guys for you replies, I think I will try to use boost::multi_index_container it offers al the features I need
from json11.
I think there is a way to do this by using the Compare
parameter when instantiating the std::map
template. You'd have to tag each inserted object with a "insert order" index, though, either using std::pair
or something custom.
from json11.
@rianhunter I believe if you do that then you'd need to know the insertion order at the time of the lookup in order to construct an appropriate key with which to find an entry, otherwise it would never actually be equal. I'm willing to be proven wrong with sample code, though. :)
from json11.
@artwyman Oops, good point, the Compare
is on the key not the value. You can hack it using multiple maps though e.g.
class Json final {
public:
class object final {
typedef int insert_order_t;
typedef std::pair<insert_order_t, std::string> map_key_type;
struct MapKeyCompare {
bool operator()(const map_key_type & lhs, const map_key_type & rhs) const {
return std::less<insert_order_t>(lhs.first, rhs.first);
}
};
insert_order_t _cur_insert_order = 1;
std::map< map_key_type, Json, MapKeyCompare> _map;
std::unordered_map<std::string, insert_order_t> _map_2;
public:
/* ... constructors, other std::map-like methods etc. */
T& operator[](const std::string & key) {
auto & insert_order_of_key = _map_2[key];
if (!insert_order_of_key) {
// key doesn't exist in map
insert_order_of_key = _cur_insert_order++;
}
return _map[std::make_pair(insert_order_of_key, key)];
}
};
};
Bookkeeping isn't too hard with this method since everything is still key'd off the original key. You do pay some extra space costs though it pays back in relative simplicity / code reuse.
btw congrats to your team on http://github.com/dropbox/djinni :)
from json11.
Related Issues (20)
- is it possible to add fields to the json? HOT 1
- in json11.cpp line 161 , why use static_cast, what if a json object is a runtime parsed object HOT 1
- clang 6.0 compilation error HOT 2
- Check if a json object key exists HOT 2
- differentiate between "number" and "integer" as per json schema HOT 1
- Tag Versioning HOT 6
- Number size issue.
- Can't parse wstring?
- auto casting HOT 4
- has_shape() always returns true when used with json11::Json::NUL HOT 1
- [Feature] conan package manager support HOT 1
- Order serealization Json::object HOT 2
- ASAN reports runtime error HOT 1
- swig4.0.0 and mingw compile the test.cpp(main modified to be a function) :error: 'final' is not a member of 'json11' HOT 3
- can't be loaded as a dll in low version c++? HOT 2
- Warning '-Werror=overloaded-virtual' with gcc-5.1.0 --std=c++14 HOT 1
- Making object_items(), array_items() not const or alternatively support mutable_object_items() HOT 1
- Super stuff. HOT 1
- No API to add Json (f.e. array) to Json::object outside of ctor. HOT 1
- Buliding for windows? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from json11.